错误信息:(提供程序:共享内存提供程序,错误: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个回答

3
我遇到了同样的错误,通过确保 SQL 服务器启用了 SQL 身份验证模式来解决它。
请参见下面的图片。
  1. 要启用,请转到服务器属性。 enter image description here

  2. 单击“安全性”选项卡,选择 SQL 服务器和窗口服务器身份验证模式,然后按“确定”。

enter image description here

您需要重新启动服务器以使更改生效,现在应该没问题了。

enter image description here


2
通过查看"C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Log\ERRORLOG"中的SQL SERVER日志文件,它显示了以下信息:"Login failed for user 'XXXXX'。原因:使用SQL身份验证登录尝试失败。服务器仅配置为Windows身份验证。[CLIENT: ]"
解决方法是打开"Microsoft SQL Server Management Studio" -> 右键单击SQL服务器,然后选择"属性" -> 安全性 -> 将身份验证更改为混合模式。 -> 重启SQL服务器。

1
我忘记在连接字符串中添加"Password=xxx;"。

我使用了Visual Studio Connect工具来生成连接字符串,但它没有起作用。我添加了密码,现在它可以正常工作了。 - Hamza Anis

1
今天我遇到了这个错误。在我的情况下,查看 SQL 服务器上的 ERRORLOG 文件给出了以下错误信息:
“登录失败,用户为 ''。原因:无法打开登录属性中指定的数据库 ''。”
这是因为几天前我删除了该用户的“默认数据库”。将默认数据库设置为我的新数据库解决了问题。
希望这能帮助其他人。

0

我曾经遇到过同样的问题。我尝试了这个页面上所有建议的答案,但都没有用!最后,我尝试了以下步骤,它对我有用:

在 SQL Server Management Studio 对象资源管理器中,右键单击服务器,然后单击“属性”。

  1. 在“安全性”页面下,选择新的服务器身份验证模式,然后单击“确定”。
  2. 在 SQL Server Management Studio 对话框中,单击“确定”以确认需要重新启动 SQL Server 的要求。
  3. 在对象资源管理器中,右键单击您的服务器,然后单击“重启”。如果 SQL Server 代理正在运行,则还必须重新启动它。

然后在您的程序包管理器控制台中尝试此操作:

Scaffold-DbContext "Server=YourServer;Database=YourDB;Persist Security Info=False;User=YourUserName; Password=YourPassword; MultipleActiveResultSets=False;Encrypt=False; TrustServerCertificate=False; Connection Timeout=30;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context DatabaseContext -f

0
在我的情况下,我的项目是 Asp.net Core 3.1,这是我的连接字符串。
"ConnectionString": "Data Source=.; Initial Catalog=WebDB; user Id=sa; Password=123"

在 SQL Server 中,数据库名称为 webdb(在 SQL Server 中为小写)。 多次更改连接字符串中的数据库名称为 webdb 后,程序运行良好。


0
在我的情况下,连接字符串中的数据库名称拼写错误。

0
在安装MSSQL服务器时启用混合身份验证模式。同时为sa用户提供密码。

0

这是旧的问题,但我在连接对话框中遇到了一个问题,它仍然默认为我已删除的数据库。通过运行这些命令,提示符中的默认数据库并没有改变。 我曾经在某个地方读到过,现在找不到了,如果您打开“连接到服务器”对话框,然后选择“选项”,并通过输入默认数据库(而不是从下拉列表中选择),则该数据库将保持在新输入的值上。这听起来像是一个缺陷,但如果有人想知道这个问题,那么应该可以解决,至少在SQL Server 2012上是这样。


0

所有良好且有效的调查课程,特别是有关更多信息的日志。

对于那些遇到这个问题的人,可能是一个简单的陷阱,当您创建了DB用户时,您可能已经强制执行了密码策略,并让用户在第一次登录时更改密码(即将密码字段周围的复选框保留为默认值)。

在SQL Management Studio中非常容易完成,当然会导致身份验证问题,除非您查看日志,否则无法掩盖。


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