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


78

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

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。(提供者:SQL网络接口,错误:50-发生本地数据库运行时错误。无法创建自动实例。有关错误详细信息,请参阅Windows应用程序事件日志。

因此,我查看了下面的“事件查看器” Application,一次又一次地看到一个警告。

指定用于缓存压缩内容的目录C:\ Users \ User1 \ AppData \ Local \ Temp \ iisexpress \ IIS临时压缩文件\ 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>

我已经尝试过这里发布的建议但是没有用。也尝试过这个

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

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


你试过了(localdb)\v11.0吗?
阿林丹·纳亚克

刚刚尝试过,(localdb)\v11.0但结果与上述相同。
乔纳森·基特尔

您确定SQL Server (SQLEXPRESS)服务正在运行。
阿林丹·纳亚克

是的,当我使用SQL Server配置管理器进行检查时,SQLEXPRESS实例正在运行
Jonathan Kittell,2014年

您是否可以使用Management Studio进行连接,有一篇文章-dyball.wordpress.com/2014/04/28/…,这可能会有所帮助〜–
Arindam Nayak

Answers:


123

对LocalDB的重大更改:适用于SQL 2014;查看本文并尝试使用它(localdb)\mssqllocaldb作为服务器名称来连接到LocalDB自动实例,例如:

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

本文还提到使用2012 SSMS连接到2014 LocalDB。这使我相信您可能安装了多个版本的SQL-这使我指出了这样的答案,建议更改您的LocalDB“实例”的默认名称,以避免将来可能出现的其他版本不匹配的问题。提到的问题并非源于此,而是提高了对潜在冲突的认识,即在一台开发机上安装多个SQL版本可能会导致...以及一些习惯,以避免某些冲突。

值得一提的另一件事-如果由于修补实例而使实例处于无法使用状态,则可能需要重新开始-卸载,重新安装-然后尝试使用mssqllocaldb值代替v12.0并查看是否可以解决您的问题。


请使用其他任何解决方案,因为它对我不起作用
Ahmad

39

运行此:

sqllocaldb创建“ v12.0”

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


2
这实际上是做什么的?
Simon_Weaver

1
创建名称为“ v12.0”的本地SQL数据库。
Falcon Momot

4
我一生都花了4个小时尝试解决此问题,此命令很快就解决了。它使用指定的名称和版本创建一个新的LocalDB实例。如果省略[version-number]参数,则默认为SqlLocalDB构建版本。-s在创建新的LocalDB实例后将其启动。此处的更多信息:msdn.microsoft.com/en-us/library/hh247716.aspx
Exel Gamboa

仅供参考,运行此cmd语句后,我编辑了Web.config文件的connectionString数据源=(LocalDb)\ V12.0; 来自数据源=(LocalDb)\ MSSQLLocalDB;
David Alan Condit '18

35

我通常会在此msdn博客文章“将LocalDB与完整的IIS结合使用”之后解决此错误

这需要编辑applicationHost.config文件,该文件通常位于C:\ Windows \ System32 \ inetsrv \ config中。按照KB 2547655中的说明,我们应该为Application Pool 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中编辑该文件的另一个副本。我一生的几个小时都不会回来。
泰勒

1
@泰勒我不能非常感谢你指出这一点。希望我早些阅读了您的评论。花了3天的时间改变了一切。这是绝招!
海盗X

1
我的天啊!感谢泰勒。我为同样的事情而挣扎,您使我免于再浪费2个小时!
130nk3r5 '16


文件在哪里?
Ciaran Gallagher

24

首先-有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; 
      ...`

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

First verify which instance you have installed您可以通过运行以下命令检查注册表和执行此操作

 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


先进的故障排除Registry配置

编辑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

故障排除Network配置

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

1
删除并添加适用的数据库。在MVC上使用VS Community 2017和MVA课程
Jeroen

您在看什么注册表项?
亚当·普洛彻

在上面的reg图片中,@ AdamPlocher可以看到,corresponding software SQL server versions在某些情况下,它可能是孤立的。因此,如果您选择重做安装,则最好检查一下这些密钥是否已删除并重新安装。如果那不是您想要的,请帮助我更好地理解您的问题,我会尽力帮助您。我花了很多时间进行故障排除
变压器

@Jeroen很高兴我能够提供帮助:)
变压器

@transformer屏幕快照或您的答案都不会显示要在注册表中检查的路径。屏幕快照显示了注册表中的Microsoft SQL Server密钥,但未显示父密钥。您的回答是“首先验证已安装的实例,可以通过检查注册表来完成”,但没有说明要在注册表中的哪个位置进行检查。它是什么注册表路径?Thx
Adam Plocher

13

实例可能已损坏或未正确更新
尝试这些命令=>

C:\>sqllocaldb stop MSSQLLocalDB<br>
LocalDB instance "MSSQLLocalDB" stopped.

C:\>sqllocaldb delete MSSQLLocalDB<br>
LocalDB instance "MSSQLLocalDB" deleted.

C:\>sqllocaldb create MSSQLLocalDB<br>
LocalDB instance "MSSQLLocalDB" created with version 13.0.1601.5.

C:\>sqllocaldb start MSSQLLocalDB<br>
LocalDB instance "MSSQLLocalDB" started.

这个建议似乎可以复制@transformer给出的建议?
凯斯·贾德

8

可能是由于versionSQL Server的错误而导致的is not installed

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

而且您不必安装它

最快的修复是将其更改为任何你已经安装的版本

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


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

4

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

  1. 首先在applicationHost配置文件中进行更改。将以下字符串替换为setProfileEnvironment =“ false”至setProfileEnvironment =“ true”

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


ApplicationHost的路径:C:\ Windows \ System32 \ inetsrv \ config \ applicationHost.config。这篇文章就明确对我说:social.msdn.microsoft.com/Forums/vstudio/en-US/...
马姆杜

3

我遇到了同样的问题。我修复被改变 <parameter value="v12.0" /> ,以 <parameter value="mssqllocaldb" /> 进入“的app.config”文件。


3

所有人请注意泰勒所说的

请注意,如果要编辑此文件,请确保使用64位文本编辑器(如记事本)。如果您使用的是32位记事本(如Notepad ++),它将自动在SysWOW64中编辑该文件的另一个副本。我一生的小时我不会回来


2

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


2

我已经解决了以上问题,请按照以下步骤进行操作

在此处输入图片说明

在进行了这些更改之后,请在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 '18

0

我的问题是我安装了多个版本的MS SQL Express。我转到安装文件夹C:/ ProgramFiles / MicrosoftSQL Server /,在其中找到了3个版本。我删除了2个文件夹,只剩下MSSQL13.SQLEXPRESS来解决问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.