0

如何在不使用数据服务器的情况下将数据存储在客户端计算机上?

我有 C# Windows 应用程序,想在用户的计算机上存储一些数据。我不想使用任何类型的数据服务器,例如 SQL Server 或 Access。用户无法读取此数据,并且此数据的结构类似于带有行的表。

存储数据的最佳方式是什么?我该如何处理这种情况?

请注意,我要编辑和更新此数据。

我所有的数据类型都是字符串,我不想只存储在内存中,因为在系统重新启动后,数据必须仍然可供我的应用程序工作。

4

5 回答 5

1

为清晰起见进行了编辑。

有2个问题:

  1. 在哪里存储数据?%APPDATA% 是应用程序特定数据的理想选择,%UserProfile% 是用户特定数据的理想选择。
  2. 您应该使用什么格式和文件类型?您可以以多种方式存储它,包括结构化或非结构化格式,例如 XML、CSV 等。如果您不希望用户能够阅读内容,可以通过某种方式对其进行加密。您还可以选择使用本地数据库类型,例如 SQLCE 或 SQLLite,它们可以提供您可能正在寻找的安全性。
于 2012-09-11T14:53:14.513 回答
0

如果您不想使用 DB,您可以使用 XML,这是一种非常标准的方法。

PS:如果您希望许多用户使用相同的 XML,也可以在每次操作时锁定文件,这样您就可以避免并发读/写错误。

一个显着的优势是您可以使用 LinqToXML 来执行查询 :)

于 2012-09-11T14:50:58.200 回答
0

您可以使用 SQL Server Compact,它是文件中的数据库

或者

如果你愿意,哟

于 2012-09-11T14:51:19.817 回答
0

我建议使用 SQL Server Compact,它是一个轻量级的、基于文件的数据库版本。您的用户不必安装 SQL Server 即可使用此选项。

这将是我的首选选项,因为它允许您使用 LINQ 使用 Entity Framework 等技术非常轻松地处理和查询文件中的数据。事实上,您可以使用 POCO 来表示您的应用程序实体,而 Entity Framework 将负责将信息读取和写入数据库。

如果您使用的是实体框架,您可以使用配置文件自动创建数据库。第一次使用任何实体时,将自动为您生成数据库文件(可以配置)。

<configuration>
    <connectionStrings>
        <add name="DatabaseContext"
             providerName="System.Data.SqlServerCe.4.0"
             connectionString="Data Source=C:\Paths\To\Location\DBName.abc"/>
    </connectionStrings>
</configuration>

我建议使用系统上的特殊文件夹之一,以使应用程序的用户对此透明。

另请注意,您可以使用任何您想要的扩展名(DBName.abc 而不是 DBName.sdf),以便文件可以与您的应用程序相关联。

使用此方法还有一个优点,即您不必一次性将整个文件加载到内存中(即,您可以查询数据并返回数据的子集),如果您只是序列化您将无法做到这一点反对文件。

于 2012-09-24T16:14:59.897 回答
-1

因为它是一个 Windows 应用程序,您可以创建一个安装该应用程序的文件夹并创建 MS excel 文件并将您的数据保存在该 excel 文件中。

于 2012-09-11T14:55:00.113 回答