数据库可移植和离线 c# wpf

Posted

技术标签:

【中文标题】数据库可移植和离线 c# wpf【英文标题】:Database portable and offline c# wpf 【发布时间】:2018-09-13 08:25:12 【问题描述】:

我正在制作一个 WPF 程序。这个程序有一个数据库和数据集。该软件在我制作程序的计算机上运行良好。今天我在另一台电脑上测试了这个软件。但它无法正常工作,因为它找不到 SQL 服务器。

所以这是一个问题。我以为它是本地的,所以我可以在任何地方使用它,但事实并非如此。

我想要的是一个可移植的数据库,因此可以在每台计算机上使用并且可以离线工作。我不知道从哪里开始,希望有人能给我一些建议

【问题讨论】:

可以使用sql server compact edition。 @LowFlyingPelican 你的意思是 SQL Server LocalDB? CE 死了 sqlite 可能是选项。 @Camilo Terevinto 纠正我,如果我错了,但 localdb 不能根据要求工作,因为它需要单独安装。 CE 支持到 2021 年。其他选项是按照 RajN 的建议使用 sqlite。 LocalDB 可以工作 【参考方案1】:

您可以使用 SQL Server LocalDB(以前称为 CE - Compact Edition)复制 MDF 文件。

SQLite 也是一个不错的选择。这就是它的目的。可以在他们的主页here 或 Nuget here 上找到库。

MDF 选项的连接字符串如下所示:

Server=.\SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf;Database=dbname; Trusted_Connection=Yes;

更多连接字符串可以在这里找到:

https://www.connectionstrings.com/sql-server-2008/ https://www.connectionstrings.com/sqlite/

【讨论】:

感谢您的反应。我目前正在集成 SQLite,但我遇到了问题。当我尝试添加 ADO.Net 实体数据模型时。 SQLite 数据库不在连接列表中?我该如何解决这个问题? LocalDB 不是 sql CE,从来都不是。 sql ce 数据库是 .sdf。 LocalDB 是 mdf。【参考方案2】:

另一个需要考虑的选择是根本不使用数据库。 将对象序列化和反序列化到文件通常比任何数据库选项都快。

当您的数据不是非常动态的或者您要保存多个相对离散的块时,序列化最适合。 不久前,我将一个应用程序从 win ce 转换为序列化。结果,它显着加快了速度。 比我预期的要大得多。

当然你也可以使用 linq to xml 来查询过滤排序等

您可以将它与消息队列(例如 ms mq)混合使用,并将您捕获的数据的动态部分保存到队列中的磁盘中。 考虑一个在笔记本电脑上偶尔连接应用程序的推销员。 他们可以将相当静态的数据加载为 xml,例如产品选项和成本。在应用程序中反序列化,以便他们可以将报价放在一起。 然后他们需要坚持报价。 您可以将每个报价序列化为一个单独的文件,然后它就会飞起来。 或者你可以使用消息队列来持久化它们。 有一个 Windows 服务来查找笔记本电脑何时连接到 Wi-Fi。 连接后,它会从队列中取出每个报价,并通过调用 Web 服务将它们发送到总部。

【讨论】:

以上是关于数据库可移植和离线 c# wpf的主要内容,如果未能解决你的问题,请参考以下文章

维护网站的在线 (Azure) 和离线版本

如何在线保存/加载数据(使用 AJAX 和 JSON 存储数据)和离线(本地)

EF框架学习---EF中的在线和离线场景

普通结果集ResultSet和离线结果集RowSet

实时和离线,大数据计算引擎谁主沉浮

实时和离线,大数据计算引擎谁主沉浮