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

Posted

技术标签:

【中文标题】SQL 网络接口,错误:50 - 发生本地数据库运行时错误。指定的 LocalDB 实例不存在【英文标题】:SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. The specified LocalDB instance does not exist 【发布时间】:2014-11-05 23:59:26 【问题描述】:

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


我们正在尝试为 Kentico CMS 设置本地开发环境,这会将我们的本地机器添加到我们当前的 Dev--> Staging--> Prod 同步链中(所以我们最终会使用 Locals --> Dev- -> 暂存--> 产品)。

我们将开发数据库复制到本地计算机到 SQL Server 的 (localdb)\v11.0 实例上,但是我们在除我之外的每个人的计算机上都遇到了问题。

这是我们得到的错误:

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

原来的错误:

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

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

【问题讨论】:

你能确认你的机器上安装了localDb吗?如果您打开 SSMS 并尝试连接到 (localdb)\v11.0 会发生什么? 我们可以通过SSMS连接到(localdb)\v11.0就好了,但是我们不能在VS中添加(localdb)\v11.0作为连接。我认为这真的很奇怪,因为我假设 (localdb)\v11.0 是 VS 2013 默认创建和使用的实例。 你调查过这个吗? Connect LocalDb in VS server explorer 刚和我的一位开发人员谈过,显然他做了所有列出的事情,除了使用实例管道名称。他可以从 VS 连接到 (localdb)\v11.0,但他的 Kentico 实例仍在获取 SQL 网络接口,错误:50。您可以使用实例管道名称作为 Web 配置中的连接字符串吗?我们将把测试推迟几天,因为我们找到了解决办法,而且我们的时间很紧,但我们很快就会回来。 【参考方案1】:
    确保您已安装 .NET Framework 4.0.2+ 将您的 AppPool 设置为在 NetworkService 帐户下运行。

    在您的数据库中为该帐户创建一个登录名。

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

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

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

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

    如果它不能帮助使用命名管道:

<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;" />

注意事项:

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

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

    命名管道可以通过在 CMD 中运行来确定:SqlLocalDB info KenticoShared 别忘了运行你的实例SqlLocalDB start KenticoShared

【讨论】:

谢谢。对我来说,连接工作的原因是找到并使用命名管道。 IIS Express 和我的 IIS 应用程序池都以同一用户身份运行。非常神秘,为什么我可以从一个连接但不能从另一个连接。 希望这可能会出现在更多的搜索结果中,我还要提一下,除了 IIS 的怪异之外,我在来自使用 的 Windows 服务的连接上也遇到了同样的问题SQL Server 身份验证,连接会神秘地工作或不工作,具体取决于服务被配置为运行的 Windows 用户。【参考方案2】:

看起来有点晦涩,但您是否看过http://support.microsoft.com/kb/941823,“SQL Server 配置管理器中未列出部分或全部 SQL Server 2005 服务...”?

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

【讨论】:

【参考方案3】:

看到这篇文章,因为这解决了我的问题: 这两篇关于将 LocalDB 与完整 IIS 结合使用的文章应该为您提供更多信息。尤其是第二部分似乎相关,但第一部分也包含一些上下文。

    Part 1: User Profile Part 2: Instance Ownership

信用:IIS connecting to LocalDB

【讨论】:

以上是关于SQL 网络接口,错误:50 - 发生本地数据库运行时错误。指定的 LocalDB 实例不存在的主要内容,如果未能解决你的问题,请参考以下文章

Update-Database - (localdb) MSSQLLocalDB出错

请高手进来帮忙,关于SQL和网络通信链接失败的问题,追加50分。

vs 2019 找不到本地数据库。错误:50 - 发生本地数据库运行时错误。指定的 LocalDB 实例不存在

为啥在建立与 SQL Server 的连接时会发生与网络相关或特定于实例的错误?

错误:50 - 发生本地数据库运行时错误。指定的 LocalDB 实例名称在 JETBRAIN RIDER 上无效

疑难解答'建立与SQL Server的连接时发生的与网络相关或特定于实例的错误'连接到Azure SQL Server