SqlCommand.ExecuteReader()
SQL Server 2008 データベースからデータを読み取るために使用するアプリケーションがあります。これを使用すると、 が得られますTimeoutException
。はCommandTimeout
40 秒に設定されています。例外が発生するまでにも 40 秒かかります。も に設定しIsolationLevel
ましたReadUncommitted
。SQL Server Management Studio でクエリを直接実行すると、問題なく高速 (1 秒) で実行されます。
クエリは比較的単純です。
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、ブール値 async) で System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior、RunBehavior runBehavior、ブール型 returnStream、String メソッド、DbAsyncResult 結果) で System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior、RunBehavior runBehavior、ブール型 returnStream、String メソッド) で System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior 動作、文字列メソッド) で System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior 動作) で System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() で
しかし、SQL Server Management Studio でステートメントを直接実行すると、エラーなく完全に機能します。