【发布时间】: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