【问题标题】:Error message: (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)错误消息:(提供者:共享内存提供者,错误:0 - 管道的另一端没有进程。)
【发布时间】:2011-12-25 22:08:26
【问题描述】:

我正在尝试在 windows server 2003 上部署我的网站。 我是否遗漏了以下错误消息中的某些内容或有什么问题,我该如何纠正?谢谢

我收到错误消息:

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

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

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[SqlException (0x80131904): 连接建立成功 与服务器,但随后在登录过程中发生错误。 (提供者:共享内存提供者,错误:0 - 没有进程在 管道的另一端。)]
System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection 拥有对象)+1019
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection 拥有连接)+108
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection externalConnection, 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(方言 方言,IConnectionHelper connectionHelper) +89
NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.Update(ISessionFactory sessionFactory) +80
NHibernate.Impl.SessionFactoryImpl..ctor(配置 cfg,IMapping 映射、设置设置、EventListeners 侦听器)+599
NHibernate.Cfg.Configuration.BuildSessionFactory() +104
MyProject.API.Data.SessionManager..cctor() 在 C:\Dev\Code\API\Data\SessionManager.cs:27

【问题讨论】:

  • 当我尝试连接的用户无权访问数据库时,我得到了这个。
  • 我收到此错误是因为连接字符串中用户的密码过期
  • @UweKeim 谢谢!这是我需要的线索,因为我在 Appveyor 构建 VM 上遇到错误,我认为他们记录的用户/密码已过期。最后只是换成集成安全性

标签: sql asp.net-mvc windows-server-2003 sql-server-2005-express


【解决方案1】:

通常,要解决此问题,您可以转到 SQL Server 配置管理器 (SSCM) 并:

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

也许可以帮上忙:Could not open a connection to SQL Server

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

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

【讨论】:

  • 我需要启用混合模式身份验证并在用户登录完成后重新启动 SQL Server 代理服务以使 SQL Server 身份验证正常工作。如果设置似乎没有“采取”,请确保重新启动该服务。希望对某人有所帮助。默认情况下启用共享内存/命名管道/ TCP/IP。
  • @Magier 右键单击​​任何协议并选择“订购”选项。您可以在那里重新排列首选连接顺序。
  • IDK 我以前怎么错过了这个,但你必须重新启动 SQL Server。我只是退出 SMSS 并重新进入——它从未重新启动实际的 SQL Server。万一其他人也在做同样的事情......
【解决方案2】:

我收到了同样的错误消息,原来是因为我没有启用混合模式身份验证。我只在 Windows Auth 上。这在 vSphere 的默认 MSSQL 部署中很常见,并且在升级到 vSphere 5.1 时会成为一个问题。

要更改为混合模式身份验证,您可以按照http://support.webecs.com/kb/a374/how-do-i-configure-sql-server-express-to-enable-mixed-mode-authentication.aspx 的说明进行操作。

【讨论】:

  • 谢谢你,我得到了同样的问题 vShpere。
  • 对我来说就是这样
【解决方案3】:

我在 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

更多关于herehere

编辑

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

【讨论】:

  • 查看日志立即指出了我的错误。我想说这应该是这里的实际答案,因为它可能是许多不同的东西。就我而言,这只是连接字符串中的用户/密码不正确。
  • 你们应该考虑在此处发布该日志文件的位置
  • 我的 sql 错误错误日志位于 %Program-Files%\Microsoft SQL Server\MSSQL13.SQL\MSSQL\LOG\ERRORLOG。
  • @Nick C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\log\ERRORLOG
【解决方案4】:

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

【讨论】:

  • 为我工作。谢谢!
  • 这个设置是什么意思?在我把它放进去之前我想知道。谢谢
  • @mgPePe 如果您在不提供用户名和密码的情况下连接到数据库,则使用可信连接。例如,如果您通过数据源名称进行连接,并且 DSN 包含您用于连接的用户 ID,那么您的受信任连接是正确的。如果您提供用户名和密码作为连接字符串的一部分,则可信连接是错误的。
【解决方案5】:

只是另一种可能性。我不得不重新启动 sql server 服务来为我解决这个问题。

【讨论】:

    【解决方案6】:

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

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

    路径取决于您的 SQL Server 版本

    【讨论】:

    • 感谢分享这个非常有用的提示。检查日志后,我已经能够解决我的问题了!
    【解决方案7】:

    您应该将服务器身份验证模式启用为混合模式,如下所示: 在 SQL Studio 中,选择 YourServer -> Property -> Security -> 选择 SqlServer and Window Authentication mode。

    【讨论】:

      【解决方案8】:

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

      【讨论】:

      • 也为我工作。本来以为用户是默认启用的。
      【解决方案9】:

      在 C# 和 SQL SERVER 中,我们可以通过在连接字符串中添加 Integrated Security = true 来修复错误。

      请找到完整的连接字符串:

      constr = @"Data Source=<Data-Source-Server-Name>;Initial Catalog=<DB-Name>;Integrated Security=true";
      

      【讨论】:

        【解决方案10】:

        将此添加到我的连接字符串对我有用:

        Trusted_Connection=true
        

        【讨论】:

          【解决方案11】:

          通过查看“C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Log\ERRORLOG”中的 SQL SERVER 日志文件,它说 “用户 'XXXXX' 登录失败。原因:尝试使用 SQL 身份验证登录失败。服务器配置为仅用于 Windows 身份验证。[客户端:]”

          修复方法是打开“Microsoft SQL Server Management Studio”->右键单击SQL Server,然后选择“属性”->安全->将身份验证更改为混合模式。 -> 重新启动 SQL 服务器。

          【讨论】:

            【解决方案12】:

            我今天收到了这个错误。在我的例子中,查看 SQL 服务器上的 ERRORLOG 文件给了我这个错误:

            用户“”登录失败。原因:打开失败 登录属性中指定的数据库''。

            这是因为我几天前删除了该用户的“默认数据库”。将默认数据库设置为我的新数据库解决了这个问题。

            希望这对其他人有所帮助。

            【讨论】:

              【解决方案13】:

              我忘记添加“密码=xxx;”在我的例子中是连接字符串。

              【讨论】:

              • 我已使用 Visual Studio Connect 工具生成连接字符串,但它无法正常工作。我已经添加了密码并且它正在工作。
              【解决方案14】:

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

              【讨论】:

                【解决方案15】:

                您好,请按照下面的屏幕截图启用服务器身份验证。

                【讨论】:

                  【解决方案16】:

                  所有良好且有效的调查过程,尤其是日志以获取更多信息。

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

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

                  【讨论】:

                    【解决方案17】:

                    检查您使用 SQL Management Studio 登录的服务器名称是否与您的连接字符串匹配。

                    我今天收到了这个错误。 原来我没有意识到安装了 SQL Server 的机器运行了多个服务器。事实上,我已经将我的数据库放在了与我认为我正在使用的服务器完全不同的服务器中。 (所以我的连接字符串指向一个没有数据库的服务器)

                    因此,当 .net 尝试访问数据库时,它找不到任何东西,并且只给出了关于管道的误导性错误消息。

                    我在 SQL Management Studio 中打开了正确的服务器,将我的数据库添加到其中,然后一切正常。 (如果下拉列表中没有正确的服务器,请尝试浏览。)

                    【讨论】:

                      【解决方案18】:

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

                      【讨论】:

                        【解决方案19】:

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

                        【讨论】:

                          【解决方案20】:

                          我知道我可能是唯一会以这种方式遇到此问题的人。但是如果你删除了 C:/{user}/ 目录下的 mdf 文件,你也会得到这个错误。恢复它,你就是金子

                          【讨论】:

                            【解决方案21】:

                            我在一个代码优先的应用程序中遇到了这个问题,该应用程序期望数据库在那里:

                            确保数据库已创建/连接字符串中的名称正确。

                            【讨论】:

                              【解决方案22】:

                              我遇到了同样的问题。我尝试了此页面中所有建议的答案,但无济于事!最后,我尝试了以下步骤,它对我有用:

                              在 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
                              

                              【讨论】:

                                【解决方案23】:

                                就我而言,我的情况有点不同。

                                1.我的错误:我错过了一个“;”在字符串连接中。我知道这是一个新手错误,但我是 C# 和 SQL Server 的新手。我有一天:)

                                private string connectionString = "Data Source=localhost;Initial Catalog=FundamentalsCSharp" 
                                       + "User=sa;Password=123456";

                                2。我的解决方案:放一个“;”它在“FundamentalsCSharp”这个短语之后不见了,但它起作用了。

                                private string connectionString = "Data Source=localhost;Initial Catalog=FundamentalsCSharp;" 
                                       + "User=sa;Password=123456";

                                3.注意: 为您拥有的初始目录更改“FundamentalsCSharp”。

                                我希望这对某人有用。谢谢!

                                【讨论】:

                                  【解决方案24】:

                                  就我而言,我的项目是Asp.net Core 3.1,这是我的连接字符串

                                  "ConnectionString": "Data Source=.; Initial Catalog=WebDB; user Id=sa; Password=123"
                                  

                                  以及 sql server 中的数据库名称webdb(在 sql server 中为小写)。 经过多次更改连接字符串中的数据库名称webdb 并且工作正常。

                                  【讨论】:

                                    猜你喜欢
                                    • 2019-09-16
                                    • 2018-04-24
                                    • 1970-01-01
                                    • 2018-05-20
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2015-07-26
                                    相关资源
                                    最近更新 更多