C# SQL网络接口,错误:50-发生本地数据库运行时错误。无法创建自动实例
我正在尝试构建一个ASP.NET MVC 5 Web应用程序,它在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是否配置为允许远程连接。(提供程
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" />