SQL 网络接口,错误:50 - 发生本地数据库运行时错误。无法创建自动实例

Posted

技术标签:

【中文标题】SQL 网络接口,错误:50 - 发生本地数据库运行时错误。无法创建自动实例【英文标题】:SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. Cannot create an automatic instance 【发布时间】:2014-12-02 14:31:42 【问题描述】:

我正在尝试构建一个 ASP.NET MVC 5 Web 应用程序,它在 App_Data 文件夹中有一个 MyDatabase.mdf 文件。我安装了带有 LocalDb 实例的 SQL Server 2014 Express。我可以使用服务器资源管理器编辑数据库表,但是当我调试应用程序并转到需要数据库的页面时,我收到以下错误。

在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:。有关错误详细信息,请参阅 Windows 应用程序事件日志。

所以我查看了Application 下的事件查看器,但一遍又一遍地只看到一个警告。

为缓存压缩内容指定的目录 C:\Users\User1\AppData\Local\Temp\iisexpress\IIS Temporary Compressed Files\Clr4IntegratedAppPool 无效。正在禁用静态压缩。

所以我尝试重新启动服务器,但仍然不行。与之前相同的错误 50。

我在Models 下创建了一个类,其中有一个名为Post 的类。

namespace MyApplication.Models

    public class Post
    
        public int Id  get; set; 
        public string Title  get; set; 
        public string Content  get; set; 
    

    public class MyDatabase : DbContext
    
        public DbSet<Post> Posts  get; set; 
    

我还有一个Controller 设置来列出来自MyDatabase 的帖子。

namespace MyApplication.Controllers

    public class PostsController : Controller
    
        private MyDatabase db = new MyDatabase();

        // GET: Posts
        public ActionResult Index()
        
            return View(db.Posts.ToList());
        
    

在我的web.config 文件中,连接字符串如下所示...

<connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=(LocalDB)\v12.0;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Integrated Security=True" 
         providerName="System.Data.SqlClient" />
</connectionStrings>

我已尝试发布 here 的建议,但没有奏效。也试过this。

我还注意到 MyDatabase 实例在我开始运行应用程序后断开连接。如果我使用 Visual Studio 中的服务器资源管理器刷新数据库,我可以查看表。

我如何可以连接到数据库并在 Visual Studio 2013 中对其进行编辑,但是当我调试应用程序时却无法连接到数据库?

【问题讨论】:

你试过(localdb)\v11.0吗? 刚刚尝试使用(localdb)\v11.0,但结果与上述相同。 你确定,SQL Server (SQLEXPRESS) 服务正在运行。 是的,当我使用 SQL Server 配置管理器检查时,SQLEXPRESS 实例正在运行 你能用Management studio连接吗,有一篇文章-dyball.wordpress.com/2014/04/28/…,可能有帮助~ 【参考方案1】:

Breaking Changes to LocalDB: Applies to SQL 2014;看看这篇文章,尝试使用(localdb)\mssqllocaldb作为服务器名连接LocalDB自动实例,例如:

<connectionStrings>
  <add name="ProductsContext" connectionString="Data Source=(localdb)\mssqllocaldb; 
  ...

文章还提到了使用 2012 SSMS 连接到 2014 LocalDB。这让我相信您可能安装了多个版本的 SQL - 这让我指出 this SO answer 建议更改 LocalDB“实例”的默认名称以避免未来可能出现的其他版本不匹配问题;提到不是问题的根源,而是为了提高对在单个开发机器上安装多个 SQL 版本可能导致的潜在冲突的认识......以及为了避免一些问题而养成的习惯。

另一件值得一提的事情 - 如果您因为尝试修复此问题而使您的实例处于不可用状态,那么可能值得重新开始 - 卸载,重新安装 - 然后尝试使用 mssqllocaldb value 而不是 v12.0 ,看看是否可以解决您的问题。

【讨论】:

请提供任何其他解决方案,因为它对我不起作用【参考方案2】:

运行这个:

sqllocaldb 创建“v12.0”

从 cmd 提示符为我解决了这个问题...

【讨论】:

这实际上是做什么的? 创建一个名为“v12.0”的本地 SQL 数据库。 我生命中的 4 个小时试图解决这个问题,这个命令在一秒钟内解决了它。它创建一个具有指定名称和版本的新 LocalDB 实例。如果省略 [version-number] 参数,则默认为 SqlLocalDB 构建版本。 -s 在创建新的 LocalDB 实例后启动它。更多信息在这里:msdn.microsoft.com/en-us/library/hh247716.aspx 仅供参考,在运行此 cmd 语句后,我编辑了 Web.config 文件的 connectionString Data Source=(LocalDb)\V12.0;来自数据源=(LocalDb)\MSSQLLocalDB; 这为我修复了它,但在修复 VS 后,重新安装我的扩展,然后强制重启或我的机器,这是我认为在创建实例后需要的所有内容 【参考方案3】:

我通常在这个 msdn 博客帖子 Using LocalDB with Full IIS 之后修复这个错误

这需要编辑 applicationHost.config 文件,该文件通常位于 C:\Windows\System32\inetsrv\config。按照 KB 2547655 中的说明,我们应该为应用程序池 ASP.NET v4.0 启用这两个标志,如下所示:

<add name="ASP.NET v4.0" autoStart="true" managedRuntimeVersion="v4.0"     managedPipelineMode="Integrated">
    <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
</add>

【讨论】:

请注意,如果要编辑此文件,请确保使用 64 位文本编辑器,如记事本。如果您使用像 Notepad++ 这样的 32 位版本,它将自动在 SysWOW64 中编辑文件的不同副本。我生命中的几个小时我不会回来。 @Tyler 我非常感谢你指出这一点。我希望我早点阅读你的评论。花了 3 天时间改变了一切。这成功了! 天啊!谢谢泰勒。我在同样的事情上苦苦挣扎,你让我免于再浪费 2 小时! 引用此blogs.msdn.microsoft.com/sqlexpress/2011/12/08/… 这个文件在哪里??【参考方案4】:

开始 - 有 4 个问题可能会导致 常见 LocalDb SqlExpress Sql Server 连接错误 SQL Network Interfaces, error: 50 - Local Database Runtime error occurred,在您开始之前need to rename the v11 or v12 to (localdb)\mssqllocaldb

Possible Issues
您没有services running 你没有firelwall ports here 已配置 您的安装有问题/损坏(以下步骤帮助您从头开始) 你没有rename the V11 or 12 to mssqllocaldb
 \\ rename the conn string from v12.0 to MSSQLLocalDB -like so-> 
 `<connectionStrings>
      <add name="ProductsContext" connectionString="Data Source= (localdb)\mssqllocaldb; 
      ...`

我发现最简单的方法是执行以下操作 - 我已附上图片和步骤以寻求帮助。

First verify which instance you have installed您可以通过检查注册表和运行 cmd 来做到这一点

 1. `cmd> Sqllocaldb.exe i` 
 2. `cmd> Sqllocaldb.exe s "whicheverVersionYouWantFromListBefore"` 
if this step fails, you can delete with option `d` cmd> Sqllocaldb.exe d "someDb"
 3. `cmd> Sqllocaldb.exe c "createSomeNewDbIfyouWantDb"` 
 4. `cmd> Sqllocaldb.exe start "createSomeNewDbIfyouWantDb"`


高级故障排除Registry 配置

编辑 1,来自 requests 和 cmets:这里是所有版本的注册表路径,以通用格式跟踪注册表

路径

// SQL SERVER RECENT VERSIONS
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\(instance-name)

// OLD SQL SERVER
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
// SQL SERVER 6.0 and above.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSDTC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLExecutive
// SQL SERVER 7.0 and above

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLServerAgent
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server 7
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServ65

搜索

SELECT registry_key, value_name, value_data  
FROM sys.dm_server_registry  
WHERE registry_key LIKE N'%SQLAgent%';

或者在 SSMS Sql Management Studio 中运行它,它会给出你在服务器上所有安装的完整列表

DECLARE     @SQL VARCHAR(MAX)
SET         @SQL = 'DECLARE @returnValue NVARCHAR(100)'
SELECT @SQL = @SQL + CHAR(13) + 'EXEC   master.dbo.xp_regread

 @rootkey      = N''HKEY_LOCAL_MACHINE'',
 @key          = N''SOFTWARE\Microsoft\Microsoft SQL Server\' + RegPath + '\MSSQLServer'',
 @value_name   = N''DefaultData'',
 @value        = @returnValue OUTPUT; 

 UPDATE #tempInstanceNames SET DefaultDataPath = @returnValue WHERE RegPath = ''' + RegPath + '''' + CHAR(13) FROM #tempInstanceNames 

 -- now, with these results, you can search the reg for the values inside reg
 EXEC (@SQL)
 SELECT      InstanceName, RegPath, DefaultDataPath
 FROM        #tempInstanceNames

故障排除Network 配置

SELECT registry_key, value_name, value_data  
FROM sys.dm_server_registry  
WHERE registry_key LIKE N'%SuperSocketNetLib%';  

【讨论】:

删除和添加数据库。使用 VS Community 2017 和 MVC 上的 MVA 课程 你在看什么注册表项?? @AdamPlocher 在上面的 reg 图片 中您可以看到 corresponding software SQL server versions 在某些情况下可能是孤立的。因此,如果您选择重做安装,最好检查这些密钥是否已删除并重新安装。如果那不是您要寻找的内容,请帮助我更好地理解您的问题,我会尽力帮助您。我花了很多时间来解决这个问题 @Jeroen 很高兴我能帮上忙 :) @transformer 屏幕截图或您的答案都没有显示在注册表中检查的路径。屏幕截图显示了注册表中的 Microsoft SQL Server 键,但它没有显示父键是什么。您的回答说“首先验证您安装了哪个实例,您可以通过检查注册表来做到这一点”,但没有说明要检查注册表的哪个位置。它是什么注册表路径?谢谢【参考方案5】:

实例可能已损坏或未正确更新。

试试这些命令:

C:\>sqllocaldb stop MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" stopped.
 
C:\>sqllocaldb delete MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" deleted.
 
C:\>sqllocaldb create MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" created with version 13.0.1601.5.
 
C:\>sqllocaldb start MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" started.

【讨论】:

这个建议似乎复制了@transformer 给出的建议? 这个工作首先卸载旧的localdb【参考方案6】:

可能出现这个错误是因为这个version的Sql Server is not installed

connectionString="Data Source=(LocalDB)\v12.0;....

你不必安装它

最快的修复方法是将其更改为您拥有的任何已安装版本

就我而言,我将其从 v12.0 更改为 MSSQLLocalDB

【讨论】:

它在我的情况下使用 MssqllocalDb 创建问题,但它显示错误:/【参考方案7】:

这个问题的最终解决方案如下:

    首先在 applicationHost 配置文件中进行更改。将下面的字符串 setProfileEnvironment="false" 替换为 setProfileEnvironment="true"

    在您的数据库连接字符串中添加以下属性:Integrated Security = SSPI

【讨论】:

ApplicationHost 的路径:C:\Windows\System32\inetsrv\config\applicationHost.config。这篇文章让我很清楚:social.msdn.microsoft.com/Forums/vstudio/en-US/…【参考方案8】:

我遇到了同样的问题。我的修复正在改变 &lt;parameter value="v12.0" /&gt;&lt;parameter value="mssqllocaldb" /&gt; 进入“app.config”文件。

【讨论】:

【参考方案9】:

请大家注意泰勒所说的话

请注意,如果要编辑此文件,请确保使用 64 位文本编辑器,例如记事本。如果您使用像 Notepad++ 这样的 32 位版本,它将自动在 SysWOW64 中编辑文件的不同副本。我生命中的几个小时我不会回来

【讨论】:

【参考方案10】:

在我的例子中,我们在一个解决方案中有多个项目,并且在使用 Code-First 迁移运行“Update-Database”命令时选择了与包管理器控制台中不同的启动项目。 确保选择正确的启动项目。

【讨论】:

【参考方案11】:

我已经解决了上面的问题应用下面的步骤

在您进行这些更改后,请在您的 web.config 中进行以下更改

 <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v12.0;AttachDbFilename=|DataDirectory|\aspnet-Real-Time-Commenting-20170927122714.mdf;Initial Catalog=aspnet-Real-Time-Commenting-20170927122714;Integrated Security=true" providerName="System.Data.SqlClient" />

【讨论】:

同时检查您的连接字符串【参考方案12】:

我的问题是我安装了多个版本的 MS SQL express。我去了我找到的安装文件夹 C:/ProgramFiles/MicrosoftSQL Server/ 它的3个版本。我删除了 2 个文件夹,只留下了解决问题的 MSSQL13.SQLEXPRESS。

【讨论】:

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

Update-Database - (localdb) MSSQLLocalDB出错

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

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

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

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

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