SQL网络接口错误: 50 - 发生本地数据库运行时错误。指定的LocalDB实例不存在。

6

编辑:我最初忽略了一个重要细节(因为我不知道它很重要),即我们在完整的IIS中运行这些站点,而不是从IIS Express运行。


我们正在尝试设置用于Kentico CMS的本地开发环境,以将我们的本地机器添加到我们当前的Dev --> Staging --> Prod同步链中(因此我们最终会得到Locals --> Dev --> Staging --> Prod)。

我们将Dev DB复制到SQL Server的(localdb)\v11.0实例上的本地机器上,但除了我的计算机之外,其他所有计算机都遇到了问题。

以下是我们遇到的错误:

应用程序无法连接到数据库,请检查web.config文件中的连接字符串和SQL服务器可用性。

原始错误:

在建立到SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器,或者服务器不可访问。请验证实例名称是否正确,并验证是否已配置SQL Server以允许远程连接。(提供程序:SQL Network Interfaces,错误:50 - 发生本地数据库运行时错误。指定的LocalDB实例不存在。)

我尝试了其他SO答案和其他网站的大量建议来弄清楚为什么我们会遇到此错误(以及为什么它不会发生在我的计算机上),但没有成功。我们可以在SSMS中连接到(localdb)\v11.0,但我们无法通过VS连接到它(相同的错误)。此外,当我们打开Sql Server配置管理器时,我们看不到任何SQL Server服务的列表。有什么想法吗?


你能确认一下本地是否已安装 localDb 吗?如果打开 SSMS 并尝试连接 (localdb)\v11.0,会发生什么? - Chris
我们可以通过SSMS连接到(localdb)\v11.0,但是我们无法在VS中将(localdb)\v11.0添加为连接。我认为这真的很奇怪,因为我以为(localdb)\v11.0是VS 2013默认创建和使用的实例。 - Jerreck
你看过这个了吗?在VS服务器资源管理器中连接LocalDb - Chris
刚刚与我的一位开发者交谈,他似乎已经完成了列出的所有事情,除了使用实例管道名称。 他可以从VS连接到(localdb)\v11.0,但是他的Kentico实例仍然遇到 SQL Network Interfaces 错误:50。你能在web.config中使用实例管道名称作为连接字符串吗?我们将推迟几天测试此功能,因为我们找到了一个解决方法,并且时间紧迫,但我们很快就会回来测试。 - Jerreck
3个回答

7
  1. 确保已安装.NET Framework 4.0.2+
  2. 设置您的AppPool在NetworkService帐户下运行。
  3. 为该帐户在您的db中创建一个登录名。

    USE [master]; CREATE LOGIN [NT AUTHORITY\NETWORK SERVICE] FROM WINDOWS; EXEC sp_addsrvrolemember N'NT AUTHORITY\NETWORK SERVICE', SYSADMIN;

  4. 通过运行SqlLocalDB share Kentico KenticoShared来与所有用户共享您的实例

  5. 使用以下格式的连接字符串:

<add name="CMSConnectionString" connectionString="Data Source=(localdb)\.\KenticoShared;Initial Catalog=KenticoDB;Integrated Security=True;Connect Timeout=60" />

  1. 如果这没有帮助,则使用命名管道:

<add key="CMSConnectionString" value="Persist Security Info=False;Integrated Security=SSPI;database=KenticoDB;server=np:\\.\pipe\LOCALDB#D2BA6590\tsql\query;Current Language=English;Connection Timeout=120;" />

注意:

  1. 您的计算机上NetworkService帐户的确切名称可以通过运行以下C#代码确定

var ns = new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null).Translate(typeof(NTAccount)).ToString()

  1. 命名管道可以通过在CMD中运行以下命令来确定:SqlLocalDB info KenticoShared
  2. 不要忘记运行您的实例SqlLocalDB start KenticoShared

谢谢这个。对我来说,使连接工作的是找到并使用命名管道。无论是IIS Express还是我的IIS应用程序池都以相同的用户身份运行。很奇怪为什么我可以从一个连接而不能从另一个连接。 - jr-juxtaposition
希望这样可以在更多的搜索结果中出现,我还要提到除了IIS的怪异之外,我在使用SQL Server身份验证的Windows服务连接上也遇到了同样的问题,这个连接会神秘地工作或不工作,具体取决于服务配置为以哪个Windows用户运行。 - jr-juxtaposition

0

看起来有点晦涩,但你看过http://support.microsoft.com/kb/941823了吗?这篇文章讲述了“SQL Server 2005的一些或全部服务未在SQL Server配置管理器中列出”的问题。

在应用程序连接到 SQL Server 时,通常会遇到两个问题,尽管你可以使用 Management Studio 进行连接。首先,你需要确保实例上已启用 TCP,http://msdn.microsoft.com/en-us/library/bb909712(v=vs.90).aspx。其次,由于你正在连接到一个命名实例,我假设该实例不是在标准端口上运行的默认实例,你需要确保 SQL Server Browser 服务正在运行,http://technet.microsoft.com/en-us/library/ms165734(v=sql.90).aspx。这是将应用程序重定向到非标准端口而无需直接指定端口的方法。Management Studio 可以通过命名管道连接并跳过 TCP,因此可以绕过这些问题。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接