C# .net+;SQL+;超时问题

C# .net+;SQL+;超时问题,c#,.net,sql-server,linq,timeout,C#,.net,Sql Server,Linq,Timeout,我在连接到SQL Server实例的.net库时遇到问题 该库是将edi文件的内容插入SQL Server 2008 R2数据库的应用程序的一部分 每次调用库时,它都会抛出一个异常(#1),表明连接已超时。有问题的服务器上还有多个其他非.net应用程序,它们使用相同的连接字符串,工作正常 我还将包含该库的应用程序安装在另一台联网机器上,从那里可以正常工作 我尝试过的事情: 设置.CommandTimeout=150;-150秒前超时。 重新安装所有.net框架 重新启动应用服务器和数据库服务器

我在连接到SQL Server实例的.net库时遇到问题

该库是将edi文件的内容插入SQL Server 2008 R2数据库的应用程序的一部分

每次调用库时,它都会抛出一个异常(#1),表明连接已超时。有问题的服务器上还有多个其他非.net应用程序,它们使用相同的连接字符串,工作正常

我还将包含该库的应用程序安装在另一台联网机器上,从那里可以正常工作

我尝试过的事情:

设置.CommandTimeout=150;-150秒前超时。
重新安装所有.net框架
重新启动应用服务器和数据库服务器
从数据上下文切换到标准数据适配器查询。
创建了一个独立的exe,以使用数据上下文和标准数据适配器查询来测试连接字符串-这两种方法第一次都失败,但随后在所有后续尝试中连接并读取数据,直到重新启动exe。这导致我在遇到异常时向库中添加一个延迟重试尝试,但这会导致异常2

我现在不知所措。任何帮助都将不胜感激

例外情况1:

System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
   at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
   at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean& marsCapable)
   at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject, Boolean withFailover)
   at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject, Boolean withFailover)
   at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
   at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
  at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user)
   at System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()
   at System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.DataContext.ExecuteMethodCall(Object instance, MethodInfo methodInfo, Object[] parameters)
   at System.Data.Linq.DataContext.ExecuteQuery[TResult](String query, Object[] parameters)

<Query Execution method call>
System.Data.SqlClient.SqlException:超时已过期。操作完成前已过超时时间,或者服务器没有响应。
位于System.Data.SqlClient.SqlInternalConnection.OneError(SqlException异常,布尔断开连接)
位于System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject stateObj)
位于System.Data.SqlClient.TdsParserStateObject.ReadsInError(TdsParserStateObject stateObj,UInt32错误)
位于System.Data.SqlClient.TdsParserStateObject.ReadSni(dbasynchresult asynchresult,TdsParserStateObject stateObj)
位于System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()处
位于System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(布尔加密、布尔信任服务器证书、布尔和marsCapable)
在System.Data.SqlClient.TdsParser.Connect(ServerInfo ServerInfo、SqlInternalConnectionDS connHandler、Boolean IgnoresInOpenTimeout、Int64 TimerSpire、Boolean encrypt、Boolean trustServerCert、Boolean integratedSecurity、SqlConnection owningObject、Boolean withFailover)
位于System.Data.SqlClient.SqlInternalConnectionDS.AttemptOneLogin(ServerInfo ServerInfo、字符串newPassword、布尔值IgnoresInOpenTimeout、Int64 TimerSpire、SqlConnection owningObject、布尔值withFailover)
位于System.Data.SqlClient.SqlInternalConnectionDS.LoginOfAliver(字符串主机、字符串新密码、布尔重定向EduceInstance、SqlConnectionOwningObject、SqlConnectionString连接选项、Int64 timerStart)
位于System.Data.SqlClient.SqlInternalConnectionDS.OpenLoginList(SqlConnection-owningObject、SqlConnectionString-connectionOptions、String-newPassword、Boolean-redirectedUserInstance)
位于System.Data.SqlClient.SqlInternalConnectionDS..ctor(DbConnectionPoolIdentity、SqlConnectionString connectionOptions、Object providerInfo、String newPassword、SqlConnection owningObject、Boolean redirectedUserInstance)
位于System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions选项、对象池组ProviderInfo、DbConnectionPool池、DbConnection所有者连接)
位于System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection所有者连接、DbConnectionPool池、DbConnectionOptions选项)
位于System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
位于System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
位于System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
位于System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection-owningConnection)
位于System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)
在System.Data.SqlClient.SqlConnection.Open()处
位于System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser用户)
在System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()处
位于System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()处
位于System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询)
位于System.Data.Linq.DataContext.ExecuteMethodCall(对象实例,MethodInfo,对象[]参数)
位于System.Data.Linq.DataContext.ExecuteQuery[TResult](字符串查询,对象[]参数)
例外情况2:

System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user)
   at System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()
   at System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.DataContext.ExecuteMethodCall(Object instance, MethodInfo methodInfo, Object[] parameters)
   at System.Data.Linq.DataContext.ExecuteQuery[TResult](String query, Object[] parameters)

<Query Execution method call>
System.Data.SqlClient.SqlException:超时已过期。操作完成前已过超时时间,或者服务器没有响应。
位于System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
位于System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection-owningConnection)
位于System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)
在System.Data.SqlClient.SqlConnection.Open()处
位于System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser用户)
在System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()处
位于System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()处
位于System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询)
位于System.Data.Linq.DataContext.ExecuteMethodCall(对象实例,MethodInfo,对象[]参数)
位于System.Data.Linq.DataContext.ExecuteQuery[TResult](字符串查询,对象[]参数)
设置.命令超时

当查询无法在指定时间内获取的总数据时发生

在您的情况下,可能会发生许多超时。我们通过以下步骤解决了本例中的超时方法

1.将RemoteLoginTimeout更改为6