SQL连接错误:System.Data.SqlClient.SqlException(0x80131904)

时间:2014-10-01 06:27:54

标签: .net sql-server sql-server-2008 named-pipes

我在几种情况下看到这种情况,并且在基于Web的应用程序连接到SQL 2008 R2服务后端时是间歇性的。用户正在进行点2点连接,并且可以打开和关闭此功能。认为这是带宽问题,直到我开始在与此SQL服务器位于同一核心交换机上的终端服务器上看到它。我已经检查了远程连接已启用,在TCP / IP配置中正确设置了端口1433,我看到的唯一原因是远程连接中的超时设置设置为100000而不是无限制。

错误是

  

System.Data.SqlClient.SqlException0x80131904):网络相关或   建立连接时发生特定于实例的错误   SQL Server。服务器未找到或无法访问。校验   实例名称正确且SQL Server配置为   允许远程连接。 (提供者:命名管道提供商,错误:40 -   无法打开与SQL Server的连接) --->

     

System.ComponentModel.Win32Exception0x80004005):网络路径   找不到 at

     
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
exception, Boolean breakConnection, Action`1 wrapCloseInAction) at
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at
System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo,
SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout,
Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean
integratedSecurity, Boolean withFailover) at
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo
serverInfo, String newPassword, SecureString newSecurePassword,
Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean
withFailover) at
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo
serverInfo, String newPassword, SecureString newSecurePassword,
Boolean redirectedUserInstance, SqlConnectionString connectionOptions,
SqlCredential credential, TimeoutTimer timeout) at
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer
timeout, SqlConnectionString connectionOptions, SqlCredential
credential, String newPassword, SecureString newSecurePassword,
Boolean redirectedUserInstance) at
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity
identity, SqlConnectionString connectionOptions, SqlCredential
credential, Object providerInfo, String newPassword, SecureString
newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString
userConnectionOptions, SessionData reconnectSessionData) at
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions
options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo,
DbConnectionPool pool, DbConnection owningConnection,
DbConnectionOptions userOptions) at
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool
pool, DbConnection owningObject, DbConnectionOptions options,
DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) at
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection
owningObject, DbConnectionOptions userOptions, DbConnectionInternal
oldConnection) at
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection
owningObject, DbConnectionOptions userOptions, DbConnectionInternal
oldConnection) at
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection
owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean
allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions
userOptions, DbConnectionInternal& connection) at
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection
owningObject, TaskCompletionSource`1 retry, DbConnectionOptions
userOptions, DbConnectionInternal& connection) at
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection
owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions
userOptions, DbConnectionInternal oldConnection, DbConnectionInternal&
connection) at
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection
outerConnection, DbConnectionFactory connectionFactory,
TaskCompletionSource`1 retry, DbConnectionOptions userOptions) at
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection
outerConnection, DbConnectionFactory connectionFactory,
TaskCompletionSource`1 retry, DbConnectionOptions userOptions) at
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1
retry) at
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1
retry) at System.Data.SqlClient.SqlConnection.Open() at
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.b__0()
at
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1
operation) at
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action
operation) at
System.Data.Entity.Core.EntityClient.EntityConnection.Open()
ClientConnectionId:00000000-0000-0000-0000-000000000000

6 个答案:

答案 0 :(得分:2)

我有同样的问题。 转到Sql Server配置管理 - &gt; SQL Server网络配置&gt;协议,用于&#39; servername&#39;并检查命名管道是否已启用。

答案 1 :(得分:1)

我遇到了同样的问题。

确保在SQL Server配置中 - &gt; SQL Server服务 - &gt; SQL Server代理已启用

这解决了我的问题

答案 2 :(得分:0)

检查以下步骤。

  1. 转到Sql Server配置管理 - &gt; SQL Server网络配置&gt;'servername'协议并检查TCP / IP是否已启用。
  2. 在运行中打开SSMS,并检查您是否可以使用指定的用户名/密码和/或使用Windows身份验证登录服务器。
  3. 对SQL本机客户端配置也重复步骤1

答案 3 :(得分:0)

检查您的路线,2014年9月28日的更新对我们造成了影响。我们不得不调整旧服务器并添加新路由。这是文章http://www.rackspace.com/knowledge_center/article/updating-servicenet-routes-on-cloud-servers-created-before-june-3-2013

答案 4 :(得分:0)

查看我的帖子here

  你好吗?我在尝试连接时遇到了同样的问题   MSSQL Server远程使用jdbc(debian上的dbeaver)。

     

过了一会儿,我发现我的防火墙配置没有   正确。所以也许它可以帮到你!

     
    

配置防火墙以允许与SQL相关的网络流量     服务器和SQL Server Browser服务。

         

必须在Windows防火墙中配置四个例外以允许访问     到SQL Server:

         

TCP端口1433的端口例外。在“新建入站规则向导”中     对话框,使用以下信息创建端口异常:     选择端口选择TCP并指定端口1433允许连接     选择所有三个配置文件(域,私人和公共)命名规则     “SQL - TCP 1433”UDP端口1434的端口例外。单击“新建规则”     再次使用以下信息创建另一个端口     例外:选择端口选择UDP并指定端口1434允许     连接选择所有三个配置文件(域,私有和公共)名称     规则“SQL - UDP 1434 sqlservr.exe的程序异常。点击     再次使用新规则并使用以下信息创建程序     例外:选择程序单击“浏览”以选择“sqlservr.exe”     这个位置:[C:\ Program Files \ Microsoft SQL     Server \ MSSQL11。\ MSSQL \ Binn \ sqlservr.exe]在哪里      是SQL实例的名称。允许     连接选择所有三个配置文件(域,私有和公共)名称     规则SQL - sqlservr.exe sqlbrowser.exe的程序异常     再次单击“新建规则”并使用以下信息进行创建     另一个程序异常:选择程序单击“浏览”选择     此位置的sqlbrowser.exe:[C:\ Program Files \ Microsoft SQL     服务器\ 90 \共享\ sqlbrowser.exe]。允许连接选择全部     三个配置文件(域,私有和公共)命名规则SQL -     sqlbrowser.exe

  
     

来源:   http://blog.citrix24.com/configure-sql-express-to-accept-remote-connections/

答案 5 :(得分:0)

任何有此错误的人,尤其是在Azure上,都会尝试将“tcp:”添加到应用程序中连接字符串中的db-server-name。这会强制sql客户端使用tcp与db通信。我假设默认情况下连接是UDP,并且可能存在间歇性连接问题