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

C# SQL网络接口,错误:50-发生本地数据库运行时错误。无法创建自动实例,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我正在尝试构建一个ASP.NET MVC 5 Web应用程序,它在App\u Data文件夹中有一个MyDatabase.mdf文件。我安装了SQL Server 2014 Express,其中包含一个LocalDb实例。我可以使用服务器资源管理器编辑数据库表,但是当我调试应用程序并转到需要数据库的页面时,我得到以下错误 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程

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

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

因此,我在事件查看器中的
应用程序下查看了一遍又一遍,只看到一条警告

为缓存压缩内容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; }
    }
}
在我的
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)\mssqllocaldb
作为服务器名来连接到localdb自动实例,例如:

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

这建议更改LocalDB“实例”的默认名称为了避免将来可能出现的其他版本不匹配问题;不是作为问题的来源提到的,而是为了提高对单个开发人员机器上安装的多个SQL版本可能导致的潜在冲突的认识……以及为了避免某些冲突而要养成的习惯

另一件值得一提的事情是,如果您的实例因尝试修复此问题而处于无法使用的状态,则可能需要重新开始—卸载、重新安装—然后尝试使用
mssqllocaldb
值而不是
v12.0
,看看这是否可以纠正您的问题。

运行此:

sqllocaldb创建“v12.0”


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

我通常在这篇msdn博客文章之后修复这个错误

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


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

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

  • 在数据库连接字符串中添加以下属性:integratedsecurity=SSPI


  • 我遇到了同样的问题。我的解决方案正在改变

    进入“app.config”文件。

    此错误可能是因为未安装Sql Server
    版本

    connectionString="Data Source=(LocalDB)\v12.0;....
    
    而且你不必安装它

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


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

    请注意泰勒的话


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


    首先-有4个问题可能会导致常见的LocalDb SqlExpress Sql Server连接错误
    Sql网络接口,错误:50-在开始操作之前发生本地数据库运行时错误

    • 你没有足够的时间
    • 你没有足够的时间 配置
    • 您的安装已发生问题/损坏(以下步骤帮助您有一个干净的开始)
    • 你没有


    高级故障排除
    注册表
    配置

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

    故障排除
    网络
    配置


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

    请尝试以下命令:

    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.
    

    在我的例子中,我们在一个解决方案中有几个项目,并且在使用代码优先迁移运行“Update Database”命令时,选择了与package manager控制台中不同的启动项目。
    确保选择正确的启动项目。

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

    在进行这些更改之后,请在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" />
    

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

    您尝试过
    (
    
    // 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%';
    
    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%';  
    
    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.
    
     <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" />