我有这个微小的 C# winforms 应用程序,它不会以任何方式变大。它只是两个输入字段和一个按钮。

我想知道你们是否知道一种方法 店铺价值观 用户输入的 在本地数据存储中. 。对于这种情况,您可能认为 10 条记录是大量数据。

要求

  1. 它不需要数据库端的任何设置。(表创建等)

  2. 我应该能够给它一个对象,它应该存储它,我不想在这上面浪费时间。

  3. 数据需要相当容易检索。

  4. 我希望能够为我创建的每个小应用程序重复使用这个东西。

我的想法

  1. 将被 XML 序列化并保存到本地设置文件夹的 POCO 对象。加载应用程序后,该文件将反序列化回 POCO 对象。

  2. OODBMS:我对这些没有经验,但我一直认为它们由单个 dll 组成,因此很容易将它们与程序打包在一起。

  3. 很久很久以前,我曾经构建过一个应用程序,将用户设置存储在注册表中。不知道这是否仍然受到赞赏。

您认为最好的方法是什么?

非常感谢代码示例!

有帮助吗?

解决方案

我考虑了这两个答案并构建了以下内容:

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;
    }
}

包含要序列化的数据的包装 POCO 对象:

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

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

要使用这些扩展:

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

并在您想要获取数据的任何方法中:

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

保存数据:

_isoStore.SaveObject(_data, FILENAME);

其他提示

你看过吗 隔离存储?它将数据存储在特定于该用户(或应用程序,具体取决于您指定的方式)的本地文件中。您可以轻松地将对象序列化到存储区或从存储区序列化对象,因为它是基于流的。这听起来像是解决您问题的完美解决方案。

既然你说 10 个项目太多了,我会投票给 #1 或 #1 的变体,二进制序列化......您似乎没有表明能够读取数据很重要,并且二进制数据应该为您提供较小的文件大小,但如果 10 已经很多,那么这仍然不重要。

话虽这么说,我很喜欢我所看到的 db4objects。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top