Pequeño local simple almacén de datos para guardar la configuración del usuario

StackOverflow https://stackoverflow.com/questions/4400192

  •  25-09-2019
  •  | 
  •  

Pregunta

Tengo esta pequeña aplicación C # WinForms que no crecerá más grande de ninguna manera. Es tan sólo dos campos de entrada y un botón.

Quiero saber si ustedes tienen conocimiento de una forma de Tienda valores que un usuario introduce en un almacén de datos local de . Usted puede considerar 10 registros a ser una gran cantidad de datos para este escenario.

Requisitos

  1. No requiere ninguna configuración desde el lado de la base de datos. (Creación de mesa, etc)

  2. Debería ser capaz de simplemente le dan un objeto y debe almacenarla, no quiero perder el tiempo en eso.

  3. Las necesidades de datos a ser bastante fácilmente recuperable.

  4. Quiero ser capaz de volver a utilizar esto para cada pequeña aplicación se crea de esta manera.

Mis ideas

  1. A POCO objeto que será XML serializado y guardado en la carpeta Configuración local. Tras la carga de la aplicación, este archivo se deserializa en el objeto POCO.

  2. Un SGBDOO:. No tengo experiencia con ellos, pero siempre pensé que consistieron en un solo archivo DLL por lo que sería fácil de empaquetarlos con el programa

  3. Una vez, hace mucho, mucho tiempo, construido una aplicación que almacena las configuraciones del usuario dentro del registro. No se si se aprecia que aún sin embargo.

¿Qué cree usted que es el mejor enfoque?

Los ejemplos de código están muy apreciado!

¿Fue útil?

Solución

he tomado ambas respuestas en cuenta y se construyó el siguiente:

public static class IsolatedStorageExtensions
{
    public static void SaveObject(this IsolatedStorage isoStorage, object obj, string fileName)
    {
        IsolatedStorageFileStream writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(writeStream, obj);
        writeStream.Flush();
        writeStream.Close();
    }

    public static T LoadObject<T>(this IsolatedStorage isoStorage, string fileName)
    {
        IsolatedStorageFileStream readStream = new IsolatedStorageFileStream(fileName, FileMode.Open);
        BinaryFormatter formatter = new BinaryFormatter();
        T readData = (T)formatter.Deserialize(readStream);
        readStream.Flush();
        readStream.Close();

        return readData;
    }
}

Una envoltura objeto POCO que contiene los datos a ser serializados:

[Serializable]
internal class DataStoreContainer
{
    public DataStoreContainer()
    {
        UserIDs = new List<int>();
    }

    public List<int> UserIDs { get; set; }
}

Para consumir estas extensiones:

private IsolatedStorageFile _isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
private DataStoreContainer _data = new DataStoreContainer();
private const string FILENAME = "MyAppName.dat";

Y en cualquier método en el que desea obtener los datos:

_data = _isoStore.LoadObject<DataStoreContainer>(FILENAME);

Para guardar los datos:

_isoStore.SaveObject(_data, FILENAME);

Otros consejos

¿Has mirado en Aislado de almacenamiento ? Almacena los datos en un archivo local, específica para ese usuario (o para la aplicación, en función de cómo se especifica). Fácilmente puede serializar objetos desde y hacia la tienda porque se basa corriente de. Suena como la solución perfecta para su problema.

Dado que usted indica 10 artículos sería mucho votaría por # 1 o una variación de # 1, binario serializado ... no parecería indicar que ser capaz de leer los datos son importantes y datos binaria debe darle archivos más pequeños, aunque si 10 es mucho esto todavía no debe ser importante.

Una vez dicho esto me gusta lo que he visto de db4objects.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top