【问题标题】:Can't access LocalDB on other computers, through application无法通过应用程序访问其他计算机上的 LocalDB
【发布时间】:2019-09-17 09:55:20
【问题描述】:

我制作了一个使用 LocalDB 的应用程序,将一些预定义的值作为它所做的一些数学运算的一部分来引用。 我创建了一个安装程序项目,以便在安装应用程序时,将 DB 的副本发送到 [ProgramData][ProductName],该副本被映射为 ConnectionString 的路径。

当我安装它并在我的计算机上运行应用程序(在 Visual Studio 之外)时,它也完全按照我的意愿运行 - 并且代码中没有错误、警告或消息。 但是,当我将它安装到其他人的计算机上时(这样他们就可以使用它并指出他们遇到的任何错误),这就是问题所在。

在他们的计算机上,每当代码引用 LocalDB 时,他们都会收到以下异常消息:

“尝试建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误”System.Data.SqlClient.SqlException (0x80131904)。 错误继续说 LocalDB 实例不存在。

我已经仔细检查了 ProgramData 文件夹,并且可以确认 LocalDB 在安装过程中确实被复制到那里 - 我已经确认代码在尝试连接到它时正在查看正确的文件夹 - 我只是可以'不知道发生了什么。

我已检查用户对该文件夹具有读/写权限,并且是其计算机上的 LocalAdmin。

请问有人可以帮助指导我解决这个问题吗?

ConnectionString 在下面,如果有帮助的话:

AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Application_Name"));
ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True";

【问题讨论】:

  • LocalDB 真的安装了吗?仅仅复制一个数据库文件是不够的——LocalDB 引擎实际上需要在那里,这是它自己的安装。用户可以运行sqllocaldb info吗? sqllocaldb versions 产生了什么?
  • 嗨,Jeroen,当我在 cmd 提示符中输入“sqllocaldb info”时,它返回“v11”;并且“sqllocaldb 版本”返回“Microsoft SQL Server 2012”。我相信安装 LocalDB 引擎也是安装时先决条件的一部分。
  • 但是,根据结果,没有 MSSQLLocalDB 实例,因为该实例通常由 Visual Studio 创建(为您提供独立于确切版本的“默认”实例)。将您的连接字符串更改为(LocalDB)\v11;... 或使用sqllocaldb create MSSQLLocalDB(或两者都使用,为您的应用程序使用新的专用实例)。
  • 感谢您对此有所了解 - 我在命令提示符下运行了“sqllocaldb create MSSQLLocalDB”,它运行成功,但不幸的是,这次我遇到了另一个错误。它指出:“无法打开数据库,因为它是 852 版本。此服务器支持 706 及更早版本。”任何的想法?感谢您的帮助
  • 根据this,您的数据库文件是使用 SQL Server 2016 创建的(这可能是您的 VIsual Studio 附带的 LocalDB 版本,或者您稍后升级的版本)。 SQL Server 2012 LocalDB 实例将无法打开它。将 SQL Server 2016 LocalDB 与您的应用程序打包在一起(如果有安装程序,我似乎记得它们更难获得)或(重新)在旧实例中创建您的数据库。

标签: c# sql-server localdb sqlexception programdata


【解决方案1】:

您实际上可以从其他机器连接到 localdb 实例。这是一个完全有效的配置。 (不过,如果您真的像服务一样运行它,最好使用 SQL Server Express Edition)。

首先,您需要确保 localdb 实例已启动。这可以是您的应用程序,也可以是通过 SqlLocalDB 实用程序。见这里:https://docs.microsoft.com/en-us/sql/tools/sqllocaldb-utility?view=sql-server-2017

其次,您需要确保启用了 TCP。此处描述了设置共享实例的详细信息:https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/sql-server-express-localdb?view=sql-server-2017

希望对您有所帮助。

【讨论】:

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