【问题标题】:C# Windows Form Application with Database not running on Client's System带有数据库的 C# Windows 窗体应用程序未在客户端系统上运行
【发布时间】:2013-05-19 07:38:14
【问题描述】:

我用 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 安装程序模板中添加安装项目作为我的应用程序中的新项目来创建安装程序。我构建了安装项目,它为我创建了安装程序。我在我的用户系统上部署了应用程序,应用程序最初启动但突然弹出错误

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

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

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

我应该退出编程吗:'(

【问题讨论】:

  • 请不要退出编程。
  • 如果您在客户端系统上使用带有AttachDbFileName= 方法的 SQL Server 数据库 - 客户端是否在其机器上安装了 SQL Server Express??跨度>
  • @marc_s 不,客户的机器上没有安装 SQL Server express,但他安装了 SQL Compact!!!
  • 如果您使用的是.mdf 文件并且如果您使用的是AttachDbFileName= 方法,那么您必须拥有 SQL Server Express 安装在该机器上。紧凑型不行。

标签: c# sql-server


【解决方案1】:

我认为您可能会混淆 Express Edition 和 Compact Edition;他们真的很不一样。

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

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

所以基本上,看起来您正在安装精简版,但随后使用连接字符串和数据文件来安装完整/快速版,这不太可能工作。

【讨论】:

  • 我猜你是对的。我使用 SQL Server 2008 R2 开发我的应用程序,但由于它不能在客户端机器上运行,我搜索了问题并得出结果,我必须在客户端机器上安装 SQLCE 以使我的程序运行,而无需更改任何内容我的程序。连接字符串和 .mdf 数据库都是 SQL Server 类型但问题是,现在该怎么办? :(
  • windows窗体应用程序将sql server安装到客户端是一个非常困难的情况。有没有什么方法可以部署和安装到客户端电脑上而不会造成额外的软件安装头痛?
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    "|DataDirectory|\AG.mdf" in 表示它需要在Data Directory中查找DB,而不是在应用程序的根文件夹中。

    如何设置DataDirectory的小例子:

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

    【讨论】:

    • 那么,我现在该怎么办?如何在我部署的应用程序的根目录中指出数据库?
    • 在上面的代码示例中,只需删除部分+“DB”或创建文件夹 DB 并将您的 db 文件放入文件夹中。
    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多