使用 SQL Server 数据库发布 C# 桌面应用程序

Posted

技术标签:

【中文标题】使用 SQL Server 数据库发布 C# 桌面应用程序【英文标题】:Publish C# Desktop Application with SQL Server database 【发布时间】:2020-12-31 14:13:21 【问题描述】:

我有一个 Visual Studio 项目,该项目具有不同的 Windows 窗体和附加的 SQL Server 数据库。我想在我的客户端计算机(其他)上安装这个项目。由于我之前没有发布任何项目,有人可以指导我吗?

当我尝试在我的计算机中发布(安装)此项目时(将创建设置文件并安装应用程序),但在保存更新删除数据时出现如下所示的错误。请正确引导我。

【问题讨论】:

请访问help center并学习How to Ask。 顾名思义,Sql Server 是一个SERVER 类的数据库。它旨在在专用服务器上运行,并且作为基本桌面数据存储非常糟糕的选择:它始终运行,即使应用程序关闭,并且将使用尽可能多的资源用于缓存。对于此用例,您需要in-process database。诸如 Sql Server Compact/LocalDb、Sqlite 甚至 MS Access 之类的东西。 作为本地数据库,我推荐使用SQLite。您可以通过 NuGet 包安装System.Data.SQLite。并且如果通过 ClickOnce 发布项目,可以将生成的 .sqlite 文件添加到 Application Files... 【参考方案1】:

你在这里采取了完全错误的方法。

数据库并不意味着安装在客户的计算机上。如果您有客户端/服务器应用程序,则数据库应仅位于您的服务器中,并且客户端将通过 TCP 等协议发送请求来访问它/请求写入它,您的服务器将对此做出反应。

当您将数据库添加到应用程序时,您会提供一个连接字符串,并且此连接字符串与您的数据库实例相关。如果您希望每个客户端都使用唯一的数据库,您需要转到他们的计算机,安装 DBMS,在那里创建数据库,然后编辑程序代码以包含特定客户端实例的连接字符串。除非您所说的客户就像您的直系亲属/室友,否则这显然不是一个可行的选择。

如果您打算为您的客户应用程序提供保存/读取数据的功能,您需要通过将数据写入程序可以读取的本地文件来实现它,例如 csv 或制表符分隔的文件。不是通过数据库。至少不是 SQL 服务器。如果您完全有义务使用数据库,那么请考虑使用嵌入式、无服务器数据库,例如 SQLite 中的数据库

您收到该错误的原因是因为客户端的程序正在尝试查找代码中指示的数据库实例,但是当然,该实例在客户端的计算机中不存在,因此客户端无法访问它可以做任何事情。

另外,请记住使用异常处理。我们无法说出确切的错误是什么(尽管很明显),因为您的代码只是说“发生了未处理的异常”。始终将您的代码包装在 try/catch 块中,至少让它们将异常打印到控制台,这样您就可以知道为什么程序在运行时失败了。

【讨论】:

以上是关于使用 SQL Server 数据库发布 C# 桌面应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用远程桌面连接到 SQL Server

将数据从 Sql Server 推送到桌面应用程序

无法在桌面应用程序中使用 SqlClient 连接到 SQL Server

无法将数据从 DataSet 更新到 C# 和 SQL Server 上的数据库

WCF / EF / SQL Server / VS2017 / C#:多层应用程序在部署到本地 IIS 10.0 作为托管服务器时出错

我可以像内置数据库一样使用我的桌面应用程序部署 SQL Server Express 吗?