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

91
我正在尝试构建一个ASP.NET MVC 5 Web应用程序,其中在文件夹中有一个MyDatabase.mdf文件。我已经安装了SQL Server 2014 Express,并且有一个LocalDb实例。我可以使用服务器资源管理器编辑数据库表格,但是当我调试应用程序并转到需要数据库的页面时,我会收到以下错误消息:
“在建立与SQL Server的连接时发生网络相关或特定于实例的错误。找不到服务器或无法访问。请验证实例名称是否正确并确保已配置SQL Server以允许远程连接。(提供程序:SQL Network Interfaces,错误:50-本地数据库运行时错误。无法创建自动实例。有关错误详细信息,请参阅Windows应用程序事件日志。”
所以我查看了下的,只看到一个警告一遍又一遍。
"为缓存压缩内容指定的目录C:\Users\User1\AppData\Local\Temp\iisexpress\IIS Temporary Compressed Files\Clr4IntegratedAppPool是无效的。静态压缩被禁用。"
所以我尝试重新启动服务器,但仍然无法正常工作。与之前相同的错误50。
我在下创建了一个类,其中我有一个名为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>

我尝试了这里发布的建议,但它没有起作用。还尝试了这个

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

为什么我可以在Visual Studio 2013中连接到数据库并对其进行编辑,但在调试应用程序时无法连接到数据库呢?


你尝试过(localdb)\v11.0吗? - Arindam Nayak
刚刚尝试使用(localdb)\v11.0,但结果和上面一样。 - Jonathan Kittell
你确定 SQL Server (SQLEXPRESS) 服务正在运行吗? - Arindam Nayak
是的,当我使用SQL Server配置管理器进行检查时,SQLEXPRESS实例正在运行。 - Jonathan Kittell
您能否使用管理工作室连接?这里有一篇文章 - http://dyball.wordpress.com/2014/04/28/sql-2014-localdb-error-cannot-connect-to-locaidbv12-o/,或许可以帮到您~ - Arindam Nayak
12个回答

130

本地数据库(LocalDB)的破坏性变更: 适用于 SQL 2014; 查看此文章并尝试使用 (localdb)\mssqllocaldb 作为服务器名称连接到 LocalDB 自动实例,例如:

<connectionStrings>
  <add name="ProductsContext" connectionString="Data Source=(localdb)\mssqllocaldb; 
  ...
文章还提到了使用2012 SSMS连接到2014 LocalDB的用法。这让我相信您可能安装了多个版本的SQL - 这也让我要指出这个SO答案,建议更改本地数据库“实例”的默认名称以避免未来可能出现的其他版本不匹配问题;这并不是问题的根源,而是为了引起对在单个开发机器上安装多个SQL版本可能导致的潜在冲突的关注...并且这是一种避免某些问题的习惯方式。
另外值得一提的是-如果由于调整以尝试解决此问题而使实例处于无法使用的状态,则可以考虑重新开始-卸载、重新安装-然后尝试使用mssqllocaldb值而不是v12.0,看看是否可以解决您的问题。

请提供其他解决方案,因为这个对我不起作用。 - Ahmad

44

运行以下命令:

sqllocaldb create "v12.0"

通过cmd提示符解决了我的问题。


2
这实际上是做什么的? - Simon_Weaver
1
创建一个名为“v12.0”的本地SQL数据库。 - Falcon Momot
4
我花了4个小时来解决这个问题,而这个命令在一秒钟内解决了它。它使用指定的名称和版本创建一个新的LocalDB实例。 如果省略[version-number]参数,则默认为SqlLocalDB版本。-s在创建后启动新的LocalDB实例。更多信息请参见: https://msdn.microsoft.com/en-us/library/hh247716.aspx - Exel Gamboa
FYI,在运行此 cmd 语句后,我编辑了 Web.config 文件中的 connectionString Data Source=(LocalDb)\V12.0;,将其从 Data Source=(LocalDb)\MSSQLLocalDB; 修改为了。 - David Alan Condit
这对我解决了问题,但在修复VS、重新安装我的扩展并强制重启我的机器后,我认为这就是创建实例后所需要的一切。 - Antony Scott

36

我通常会按照这篇msdn博客文章的指示进行操作来修复此错误:在完整的IIS中使用LocalDB

这需要编辑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>

17
请注意,如果您想编辑此文件,请确保使用64位的文本编辑器,比如记事本。如果您使用32位的文本编辑器,比如Notepad++,它会自动编辑SysWOW64中的另一个副本。浪费了我无法挽回的时间。 - Tyler
1
@Tyler,非常感谢你指出这个问题。我希望早点看到你的评论。我花了三天时间改变了一切。这个方法解决了问题! - Pirate X
1
哇!谢谢Tyler。我也遇到了同样的问题,你让我省下了另外2个小时的浪费! - 130nk3r5
1
请参考以下链接:https://blogs.msdn.microsoft.com/sqlexpress/2011/12/08/using-localdb-with-full-iis-part-1-user-profile/,其中介绍了如何在完整版IIS中使用LocalDB。 - David
这要放在文件的哪里? - Ciaran Gallagher
谢谢!我尝试了很多个小时,所有我需要做的就是在那个文件中将setProfileEnvironment="true"打开,然后它就起作用了! - Dimitris Thomas

29

首先,可能有4个问题导致了 常见的 LocalDb SqlExpress Sql Server 连接错误 SQL Network Interfaces, error: 50 - Local Database Runtime error occurred。在开始之前,您需要将v11或v12重命名为(localdb)\mssqllocaldb

Possible Issues
 \\ rename the conn string from v12.0 to MSSQLLocalDB -like so-> 
 `<connectionStrings>
      <add name="ProductsContext" connectionString="Data Source= (localdb)\mssqllocaldb; 
      ...`
我发现最简单的方法是执行以下操作-我已附上图片和步骤以供帮助。
首先验证您安装了哪个实例,您可以通过检查注册表和运行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"`

SqlLOCALDb_edited.png


高级故障排除注册表配置

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

路径

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

故障排除 网络 配置
SELECT registry_key, value_name, value_data  
FROM sys.dm_server_registry  
WHERE registry_key LIKE N'%SuperSocketNetLib%';  

1
删除和添加数据库已经起作用了。使用VS Community 2017和MVC的MVA课程。 - Jeroen
在上面的_reg图片_中,您可以看到相应的软件SQL服务器版本,在某些情况下可能会变成孤立状态。因此,如果您选择重新安装,最好检查这些密钥是否已被删除并重新安装。如果这不是您要寻找的帮助,请让我更好地理解您的问题,我会尽力帮助您。我花了很多时间来解决这个问题。 - Transformer
@Jeroen 很高兴我能帮到你 :) - Transformer
@transformer,你的截图和回答都没有显示要检查注册表中的路径。截图显示了注册表中的Microsoft SQL Server键,但没有显示其父键。你的回答说:“首先验证你安装了哪个实例,你可以通过检查注册表来完成”,但没有说明在注册表中要检查哪里。注册表路径是什么?谢谢。 - Adam Plocher
@AdamPlocher - 一个快速的谷歌搜索就能找到路径 -- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\YourInstanceName\MSSQLServer\CurrentVersion 或者 -- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\SOMEOTHER_Instance\MSSQLServer\CurrentVersion。例如,在SQL 2008中,你可以通过 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL 枚举出所有实例的列表。 - Transformer
显示剩余3条评论

21

一个实例可能已经损坏或没有正确更新。

尝试这些命令:

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给出的建议? - Caius Jard
首先卸载旧的本地数据库,然后再执行此操作。 - Geomorillo

8
也许出现这个错误是因为 Sql Server 的这个版本没有被安装。
connectionString="Data Source=(LocalDB)\v12.0;....

您不需要安装它

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

在我的情况下,我将其从v12.0更改为MSSQLLocalDB


在我的情况下,它会创建问题,我正在使用MssqllocalDb,但它显示错误:/ - Ahmad

5
这个问题的最终解决方案如下:
  1. 首先,在applicationHost配置文件中进行更改。将以下字符串setProfileEnvironment="false"替换为setProfileEnvironment="true"

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


应用程序主机路径: C:\ Windows \ System32 \ inetsrv \ config \ applicationHost.config。 这篇帖子让我明白了: https://social.msdn.microsoft.com/Forums/vstudio/en-US/6986fc37-870b-466c-8306-7712966071b0/50-local-database-runtime-error-occurred-cannot-create-an-automatic-instance-see-the-windows?forum=lightswitch - Mamdouh

4

我遇到了同样的问题。我的解决方法是将 <parameter value="v12.0" /> 改为 <parameter value="mssqllocaldb" /> 并写入到 "app.config" 文件中。


3

请注意Tyler说的话

请注意,如果您想编辑此文件,请确保使用64位文本编辑器,例如记事本。如果您使用32位编辑器,例如Notepad ++,它将自动编辑SysWOW64中的另一个副本文件。这浪费了我很多时间。


2

我已经通过以下步骤解决了上述问题:

enter image description here

在您进行这些更改后,请按照下面的步骤修改您的 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" />

请检查您的连接字符串。 - Sagar Shinde

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