【问题标题】:Object reference not set to an instance of object at run time C# SQL Server?对象引用未在运行时 C# SQL Server 设置为对象实例?
【发布时间】:2016-05-18 17:59:48
【问题描述】:

我已经用 C# 构建了一个应用程序。我打算使用 install shield 制作一个 msi 安装程序文件。当我尝试将其安装在其他地方时,该应用程序在我的 PC 上安装并运行良好,它给了我一个严重错误

“运行时对象引用未设置为对象的实例。”

为了清楚起见,我想解释第一个表单是登录表单。 该应用程序在我的本地 PC 上运行意味着它可以很好地运行应用程序。但我不知道为什么会引起这么多麻烦。

连接字符串是:

<connectionStrings>
        <add name="ConString" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=test; AttachDBFileName=D:\test.mdf; Integrated Security=True"
            providerName="System.Data.SqlClient" />
</connectionStrings>

为了方便起见,我还没有添加任何用户名和密码。 我多次尝试将附加的DBFILENAME 的目的地更改为|DataDirectory|test.mdf...等,但在客户端PC 上也不起作用。 这是否意味着我必须安装 SSMS(SQL Server Management Studio)?这是我唯一没有在客户端 PC 上安装的东西。

【问题讨论】:

  • 嗯,您正在寻找一个本地数据库。如果您想使用数据库,则需要拥有本地数据库或访问远程数据库。如果您正在访问远程数据库,那么您需要设置一个连接字符串以用于初始化您的数据库连接。
  • (LocalDB)\v11.0;来自您的本地 PC。客户如何从那里访问数据库?您需要配置 connectionString 以匹配服务器。您收到错误消息“未设置对象引用”是因为客户端尝试访问的任何内容都返回 null。我不知道它是什么,因为我没有太多信息。
  • 您需要发布引发该异常的实际代码。
  • 客户端机器是指安装了 SQL Server LocalDb 的独立离线 PC。其次,当我使用 AttachDBFileName 时,它​​看起来像是一个连接字符串问题,应用程序在我的开发人员 PC 上给出了相同的错误。请问如何更改此连接字符串?

标签: c# .net sql-server ssms


【解决方案1】:

您可以尝试以下任一方法:

  • SQL Server 数据库必须安装在客户端计算机上的某个位置,这样只有在您的应用程序中附加了(test.mdf) 时,您的应用程序才能访问它。

  • 或者,您可以只在服务器机器上安装 SQL Server,而不必每次都在每台客户端机器上安装 SQL Server 和应用程序。

【讨论】:

  • 我不想使用服务器机器我希望客户拿走他的电脑并做他想做的任何事情。只是我没有提到我正在使用服务器。
  • 所以最好按照上述步骤操作。只需在客户的机器上安装 Express Edition……就可以了。
【解决方案2】:

如果你想要一个单用户数据库,你需要确保在目标机器上安装了sql express。否则,您将需要一个服务器来指向。

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/f21c0728-935d-492a-baaf-ff2704e3683b/attachdbfilename-option-in-connection-string?forum=sqldataaccess

AttachDBFilename 是 SQL Express 独有的,它启动一个用户实例 附加到单个用户的特定数据库文件名的 SQL Express 模式。数据库只是要使用的数据库的名称,它没有 附加内涵。对于任何生产服务器,您最希望 可能没有使用 AttachDBFilename。它对 在单用户模式下进行开发和实验。

您必须在生产服务器上更改数据源=.\SQLEXPRESS 因为它没有运行 SQL Express 的命名实例。 服务器名称的语法是 \。请注意,一个空白 等同于默认实例。在您的情况下,网络 服务器正在运行 SQL Server 的默认实例。选项 SQLEXPRESS 中也可以安装一个默认实例,不过 您必须明确选择它,否则它会以命名方式安装 名称为 SQLEXPRESS 的实例。您可以使用(本地)或 本地主机或 .或者代替服务器上的IP,所以 只要您不指定不存在的实例名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多