错误信息:(提供程序:共享内存提供程序,错误:0 - 管道另一端没有进程。)

89

我正试图在Windows Server 2003上部署我的网站。以下错误信息是否有遗漏或出现了什么问题?我该如何纠正它?谢谢。

我遇到了以下错误信息:

 

已成功与服务器建立连接,但在登录过程中发生错误。(提供程序:共享内存提供程序,错误:0 - 管道的另一端没有进程。) 说明:执行当前 Web 请求时出错。请查看堆栈跟踪以获取有关错误以及其在代码中的位置的更多信息。

 

异常详细信息:System.Data.SqlClient.SqlException:已成功与服务器建立连接,但在登录过程中发生错误。(提供程序:共享内存提供程序,错误:0 - 管道的另一端没有进程。)

 

源错误:

 

在执行当前 Web 请求时生成了一个未处理的异常。可以使用下面的异常堆栈跟踪来识别异常的起源和位置。

 

堆栈跟踪:

 

[SqlException(0x80131904):已成功与服务器建立连接,但在登录过程中发生了错误。(提供程序:共享内存提供程序,错误:0 - 管道的另一端没有进程。)]
  System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection ownObject)+1019
  System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)+108
  System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)+126
  System.Data.SqlClient.SqlConnection.Open()+125
  NHibernate.Connection.DriverConnectionProvider.GetConnection()+104
  NHibernate.Tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.Prepare()   + 15 NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.GetReservedWords(Dialect   dialect,IConnectionHelper connectionHelper)+89
  NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.Update(ISessionFactory   sessionFactory)+80

NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners) +599
NHibernate.Cfg.Configuration.BuildSessionFactory() +104
MyProject.API.Data.SessionManager..cctor() in C:\Dev\Code\API\Data\SessionManager.cs:27

这段代码涉及到NHibernate技术。其中,NHibernate是一个流行的ORM(对象关系映射)框架,用于在应用程序和数据库之间进行数据交互。该错误是由SessionManager.cs文件中的静态构造函数引起的,即创建对话工厂时出现问题。需要检查配置文件和映射以确保它们正确,并且事件侦听器也必须被正确地设置。

2
当我尝试连接的用户没有访问数据库权限时,我得到了这个错误。 - Peter
1
我之所以得到这个错误是因为连接字符串中用户的密码已经过期了。 - Uwe Keim
1
@UweKeim 谢谢!这正是我需要的线索,因为我在 Appveyor 构建 VM 上遇到了错误,我想他们记录的用户/密码已经过期了。最终我只是改用了集成安全性。 - Keith Nicholas
27个回答

89

通常情况下,要解决此问题,您需要打开 SQL Server 配置管理器 (SSCM) 并执行以下操作:

  1. 确保启用了共享内存协议
  2. 确保启用了命名管道协议
  3. 确保启用了 TCP/IP,并且在设置中位于命名管道之前

或许这个链接对您有帮助:无法连接到 SQL Server

提示:如果这是 SQL Server 的新实例,请确保已启用SQL Server 和 Windows 身份验证

  1. 右键单击 SSMS 中的服务器并打开服务器属性
  2. 进入“安全性”-> 选择“SQL Server 和 Windows 身份验证模式”
  3. 重新启动服务器并使用凭据登录

6
为了让SQL Server身份验证正常工作,我需要启用混合模式身份验证,并在用户登录完成后重新启动SQL Server代理服务。如果设置似乎没有生效,请确保重新启动该服务。默认情况下启用了共享内存/命名管道/TCP/IP。希望这能帮助到某些人。 - Rachael
1
@Magier 右键单击任何协议,然后选择“排序”选项。您可以在那里重新排列首选连接顺序。 - CauselessEffect
我之前不知道怎么错过了这个,但是你必须重新启动 SQL Server。我只是退出 SMSS 然后再进入——这永远不会重新启动实际的 SQL Server。如果有其他人也在做同样的事情... - MarkJoel60

39

请检查您的连接字符串是否添加了"Trusted_Connection=true"


1
对我有用。谢谢! - WillC
这个设置是什么意思?我想在使用之前先了解一下。谢谢。 - mgPePe
@mgPePe 如果您连接数据库时没有提供用户名和密码,则使用受信任的连接。例如,如果您通过数据源名称进行连接,并且 DSN 包含您用于连接的用户 ID,则受信任的连接为 true。如果您在连接字符串中提供了用户名和密码,则受信任的连接为 false。 - Rukshala Weerasinghe
我也成功了...谢谢 - Ndubuisi Jr
信任连接意味着与连接进程相关联的身份将被用作 SQL Server 进行身份验证的身份。如果您正在启动进程,则与进程相关联的身份是您的 Windows 登录凭据。如果您的连接进程正在运行为服务,请检查服务属性以查看它使用的身份。 - Elroy Flynn

35

谢谢,我在vSphere上遇到了同样的问题。 - cat916
这就是我要说的了。 - mgPePe

29

我在SQL Server Management Studio中遇到了相同的错误。

我发现,要查看更具体的错误信息,需要查看SQL Server创建的日志文件。当我打开日志文件时,找到了这个错误:

无法连接,因为已经达到了“2”个用户连接的最大数量。系统管理员可以使用sp_configure来增加最大值。连接已关闭。

我花了很多时间才解决了这个问题。最终运行以下代码解决了我的问题。

sp_configure 'show advanced options', 1;
go

reconfigure
go

sp_configure 'user connections', 0
go

reconfigure
go

关于这个问题的更多信息,请点击这里这里

编辑

要查看日志,在 Windows 启动按钮上搜索 "logs",然后单击 "查看事件日志"。从那里转到 "Windows 日志" 下的 "应用程序"。您还可以选择 "系统" 日志以查看系统级错误。您可以通过在右侧单击 "筛选器当前日志",然后选择 "错误复选框" 来过滤当前日志。


4
查看日志立即指出了我的问题所在。我认为这应该是实际的答案,因为可能有许多不同的原因。在我这种情况下,连接字符串中只是用户/密码不正确。 - julealgon
3
你们应该考虑在这里发布那个日志文件的位置。 - Nick
4
SQL错误日志位于%Program-Files%\Microsoft SQL Server\MSSQL13.SQL\MSSQL\LOG\ERRORLOG。 - Jared Phelps
4
@Nick C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\log\ERRORLOG - Kellen Stuart

10

这只是另一个可能性。我不得不重新启动 SQL Server 服务来解决我的问题。


7

“真正”的错误在SQL错误日志中:

C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\log\ERRORLOG

路径取决于您所使用的SQL Server版本。


1
感谢分享这个非常有用的提示。在检查日志后,我已经成功解决了我的问题! - Carl Verret
1
太有趣了:即使一年后,我在新电脑上遇到了完全相同的问题,而这个解决方案解决了我的问题 :) (我的新本地服务器上缺少数据库) - Carl Verret

6

将这个加入我的连接字符串,对我有用:

Trusted_Connection=true

5

使用Windows凭据登录SQL服务器 - > 登录 - > 选择登录名 - > 在属性中 - > 检查登录是否启用/禁用。 如果已禁用,请启用它,这个解决方案对我有效。


我也试过了,本来以为用户默认是启用的。 - SamiHuutoniemi

5
您需要将服务器身份验证模式设置为混合模式,步骤如下: 在 SQL Studio 中,选择您的服务器 -> 属性 -> 安全性 -> 选择 SqlServer 和 Windows 身份验证模式即可。

4
在C#和SQL SERVER中,我们可以通过在连接字符串中添加Integrated Security=true来修复错误。
请查找完整的连接字符串:
constr = @"Data Source=<Data-Source-Server-Name>;Initial Catalog=<DB-Name>;Integrated Security=true";

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