3

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

我想知道你们是否知道将用户输入的存储在本地数据存储中的方法。对于这种情况,您可能会认为 10 条记录是很多数据。

要求

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

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

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

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

我的想法

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

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

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

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

非常感谢代码示例!

4

3 回答 3

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);
于 2010-12-10T11:07:51.550 回答
2

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

于 2010-12-09T16:21:58.963 回答
1

既然你说 10 项会很多,我会投票给#1 或#1 的变体,二进制序列化......你似乎没有表明能够读取数据很重要,二进制数据应该给你更小的文件大小,但如果 10 很多,这仍然不重要。

话虽如此,我很喜欢我所看到的 db4objects。

于 2010-12-09T16:00:16.690 回答