我有一个用于SqlCommand.ExecuteReader()
从SQL Server 2008数据库读取数据的应用程序。当我使用它时,我会得到一个TimeoutException
。将CommandTimeout
被设定为40岁-也直到发生异常时需要40秒。我还将设置IsolationLevel
为ReadUncommitted
。当我直接在SQL Server Management Studio中执行查询时,它将快速执行(1s),没有任何问题。
查询相对简单:
select TOP (50) *
from ActivityView('de') a
where IsTrashed = 0 and
(Subject Like '%' and
(a.InchargeId = 'e9584e24-090a-4ef3-a048-330399bfb1b0' or a.PrivilegeLevelId in ('eb39d6bf-4904-4b8d-942f-39463c5d3c3f') or
(select top 1 Id from ActivityContact x where x.ActivityId = a.Id and x.UserId = '61423b82-bd6a-4381-808a-6df42f02ab59' ) is not null))
order by a.[Key] desc
当我执行此操作时,我得到了休闲的异常:
在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔值breakConnection) 在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection) 在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)处 在System.Data.SqlClient.SqlDataReader.SetMetaData(_SqlMetaDataSet metaData,布尔moreInfo) 在System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)处 在System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 在System.Data.SqlClient.SqlDataReader.get_MetaData() 在System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串resetOptionsString) 在System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔returnStream,布尔异步) 在System.Data.SqlClient.SqlCommand.RunExecuteReader处(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔值returnStream,String方法,DbAsyncResult结果) 在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法) 在System.Data.SqlClient.SqlCommand.ExecuteReader处(CommandBehavior行为,String方法) 在System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior行为) 在System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
但是,当我直接在SQL Server Management Studio中执行语句时,它运行正常,没有错误。
由于您具有根据用户选择的过滤器构造的SQL命令,因此需要基于这些选择生成更有效的SQL命令
因此,如果用户未选择Subject
,则不要使用Subject Like '%'
,不要在查询中包括该内容。请记住,表中的任何记录都将符合该条件,并且LIKE运算符非常耗时
将这个想法(仅包括具有某些条件的过滤器)应用到命令可以具有的所有可能的过滤器中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句