Dot-Net
.net 4 和 EF 的 Sql 異常
我們使用 .net 4 MVC2 和 EF & Sql Server 2005。
對於某些請求,這種情況很少發生,只有當我們進行搜尋時,該搜尋是通過映射到執行全文搜尋的儲存過程的類來實現的,我們會得到異常:
[SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.] System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +2030802 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +5009584 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +234 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2275 System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33 System.Data.SqlClient.SqlDataReader.get_MetaData() +86 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +311 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +987 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10 System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +443 [EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.] System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +479 System.Data.Objects.ObjectContext.CreateFunctionObjectResult(EntityCommand entityCommand, EntitySet entitySet, EdmType edmType, MergeOption mergeOption) +182 System.Data.Objects.ObjectContext.ExecuteFunction(String functionName, MergeOption mergeOption, ObjectParameter[] parameters) +218 System.Data.Objects.ObjectContext.ExecuteFunction(String functionName, ObjectParameter[] parameters) +53如果在錯誤發生後重試搜尋(使用相同或不同的術語),它會正常工作。
任何建議都非常感謝
謝謝
–MB
想法1:異常似乎發生在連接到sql server之後,並且在執行儲存過程時,我是否正確?如果是這種情況,那麼我需要延長查詢執行超時而不是連接超時?這可能嗎,在哪裡?
想法 2:也許我錯了,這可能是池中的陳舊連接?在 Java 世界中,您可以在應用程序獲取連接之前傳遞在連接上執行的 sql,以確保連接已打開並正常工作?會不會是這個原因。我無法在http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx中找到這樣的選項
想法3:我迷路了:)
您可以嘗試設置
ObjectContext.CommandTimeout屬性:獲取或設置所有對像上下文操作的超時值(以秒為單位)。空值表示將使用基礎提供程序的預設值。
是的,嘗試增加 web.config 中的連接超時:
<connectionStrings> <add name="AdventureWorksEntities" connectionString="metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl; provider=System.Data.SqlClient;provider connection string='Data Source=localhost; Initial Catalog=AdventureWorks;Integrated Security=True;**Connection Timeout=60;** multipleactiveresultsets=true'" providerName="System.Data.EntityClient" /> </connectionStrings>此外,您是否真的嘗試過手動執行 SPROC 需要多長時間?