C#Windows窗体应用程序,数据库未在客户端系统上运行

时间:2013-05-19 07:38:15

标签: c# sql-server

我在C#中开发了一个使用SQL Server数据库连接的Windows窗体应用程序。我是在.NET Framework 4.0和SQL Server 2008 R2中开发的。我的应用程序使用名为AG.mdf的应用程序根目录中的本地数据库。

这是我的连接字符串:

Data Source=.;AttachDbFilename=|DataDirectory|\\AG.mdf;Integrated     Security=True;User Instance=True 

我通过在Visual Studio安装程序模板中添加Setup Project作为我的应用程序中的新项目来创建安装程序。我构建了安装项目,它为我创建了安装程序。我在我的用户系统上部署了应用程序,应用程序最初启动但后来突然弹出错误

  

您的应用程序中发生了未处理的异常。如果单击“继续”,应用程序将忽略此消息并尝试继续。如果单击退出,应用程序将立即关闭。

     

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)

P.S:我也在我的用户系统上安装了.NET Framework 4.0和SQL Server Compact Edition!

我应该退出编程:'(

3 个答案:

答案 0 :(得分:2)

我认为你可能会对Express Edition和Compact Edition感到困惑;他们真的很不一样。

Compact Edition采用 SDF 数据库文件,是一个嵌入式数据库,而不是一个单独的服务器。我认为它根本不能直接与MDF一起使用 - 你可能会export an MDF to an SDF

SQLCE不了解用户实例,集成安全性或数据库附件。我认为你需要直接在数据源部分找到SDF文件的路径,但它需要 SDF,而不是MDF。

所以基本上,看起来你正在安装Compact Edition,但后来使用连接字符串和数据文件进行完整/快速版本,这不太可行。

答案 1 :(得分:1)

非常感谢大家的帮助。我自己解决了这个问题。我唯一关心的是在客户端的机器上安装SQL Server,但后来我意识到我必须在客户端系统上安装数据库管理工具(SQL Server)才能运行我的应用程序。
因此,我在客户端的计算机上安装了SQL Server Express并稍微更改了我的QueryString,如下所示

  

数据源=。\ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ AG.mdf; Database = AG; Integrated Security = True; User Instance = True; Trusted_Connection = Yes

此外,我还在包含已部署应用程序的文件夹中将完全控制权限作为允许,以便我的应用程序中的Dot Net Framework可以访问已部署的应用程序。 mdf数据库
快乐的编码! :)

答案 2 :(得分:0)

“| DataDirectory | \ AG.mdf”表示需要查看数据目录中的数据库,但不能查看应用程序的根文件夹中的数据库。

如何设置DataDirectory的小例子:

AppDomain.CurrentDomain.SetData("DataDirectory", AppDomain.CurrentDomain.BaseDirectory + "DB");