【发布时间】:2016-08-04 15:06:14
【问题描述】:
我正在尝试使用一个存储过程,在该过程中我发送通过 ADO.NET C# 代码发送的单个参数。
现在的问题是从我的开发环境调用存储过程,当我将它部署到生产环境时,我遇到 timeout elapse 异常并且它永远不会到达存储过程(我已添加日志以检查存储过程是否实际被命中以及在哪个阶段导致超时)。
异常:System.Data.SqlClient.SqlException (0x80131904):超时。在操作完成之前超时时间已过或服务器没有响应。 ---> System.ComponentModel.Win32Exception (0x80004005): 等待操作超时
在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔型 breakConnection,Action
1 wrapCloseInAction)1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔调用者HasConnectionLock,布尔异步关闭)
在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean & dataReady)
在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串 resetOptionsString)
在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,布尔异步,Int32 超时,任务和任务,布尔异步写入,SqlDataReader ds)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,String 方法,TaskCompletionSource1 completion, Int32 timeout, Task& task, Boolean asyncWrite)1 完成,String methodName,布尔 sendToPipe,Int32 超时,布尔 asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource
在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
在 ProjectName.ViewModel.ClassViewModel.c__DisplayClasse.b__d()
我不知道生产服务器上发生了什么。请指导我解决这个问题。
对于相同的错误消息有很多问题,但我无法找到类似的问题场景,例如未执行存储过程,但仍会导致超时错误。
我会包含存储过程,但它是非常基本的存储过程。
请帮忙:)
谢谢, 尼基尔·查万。
【问题讨论】:
-
尝试在不使用应用程序的情况下直接运行存储过程,然后尝试通过注释查询的不同部分来找出问题所在,即说明哪个需要很长时间才能在服务器上运行跨度>
-
如果我从 sql server management studio 执行存储过程,它几乎不需要 3-4 秒。问题是当我尝试将它与 ADO.NET 代码一起使用时,根本没有执行存储过程。
-
尝试使用这个连接字符串 DataSource=server;InitialCatalog=databaseUserId=username;Password=password;Connect Timeout=0, 0 表示无限超时
-
@rashfmnb 如果尝试连接到错误的服务器,这将永远挂起应用程序
-
是的,我不能在生产服务器上冒险......对不起,我不能设置无限超时:)
标签: c# sql-server stored-procedures