我有一个存储过程,我使用LinqToSQL调用。我没有做任何特别的事情,例如Linq存储过程超时,但SSMS快速
MyDataContext db = new MyDataContext()
var results = db.storedProcedure(param1, param2, param3)
// Do stuff
当我使用完全相同的参数运行存储过程时,我会在2到6秒之间得到结果。数据库是一个远程数据库。
但是,当我运行存储过程需要(调试后......)275秒!在正常情况下这给了以下异常:
[Win32Exception(0X80004005):等待操作超时]
[SQLEXCEPTION(0x80131904):超时过期。在操作完成之前已经超时或服务器没有响应。] System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection,操作
1 wrapCloseInAction) +1753346 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction)+5295154 System.Data.SqlClient.TdsParser .ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔callerHasConnectionLock,布尔asyncClose)242 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand的cmdHandler,SqlDataReader的数据流,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,布尔& dataReady)1682 System.Data .SqlClient.SqlDataReader.TryConsumeMetaData()+59 System.Data.SqlClient.SqlDataReader.get_MetaData()+90 System.Data.SqlClient.SqlCommand.Finish的ExecuteReader(SqlDataReader的DS,RunBehavior runBehavior,字符串resetOptionsString)+ 365个 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(的CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔returnStream,布尔异步,的Int32超时,任务&任务,布尔asyncWrite)1325 系统.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method,TaskCompletionSource`1 completion,Int32 timeout,Task & task,Boolean asyncWrite)+175 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔returnStream,String方法)+53 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior行为,String方法)+134 System.Data.SqlClie nt.SqlCommand.ExecuteDbDataReader(CommandBehavior行为)+41 System.Data.Common.DbCommand.ExecuteReader()+12 System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询,QueryInfo queryInfo,IObjectReaderFactory工厂,Object [] parentArgs,Object [] userArgs,ICompiledSubQuery [] subQueries,Object lastResult)+1306 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query,QueryInfo [] queryInfos,IObjectReaderFactory factory,Object [] userArguments,ICompiledSubQuery [] subQueries )+118 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)+342 System.Data.Linq.DataContext.ExecuteMethodCall(对象实例,MethodInfo methodInfo,Object []参数)+83
所有其他存储过程都以相同方式调用,但都不存在此问题。远程数据库管理员说他可以在超时发生之前看到呼叫的开始和结束,所以它似乎与Linq接收数据之后的步骤有关。
有没有人遇到过这个以及任何想法如何解决它?
我已经尝试从dmbl文件中删除SP并重新添加它。它注意到其中一个值从小数变成了双倍,但除此之外它们都是一样的。
一如往常,这是昨天做工精细!
在此先感谢。