- PR -

ストアドプロシージャ呼出し時のEXCEPTION

1
投稿者投稿内容
ベータ
会議室デビュー日: 2007/01/23
投稿数: 2
投稿日時: 2007-01-23 15:55
.net framework 2.0、IIS6.0 SQLSERVER2003でWEBアプリケーションを作成しています。
.NETのアプリケーションから、ストアドプロシージャを実行する際に、
次のエラーが出て困っています。
タイミングとすれば、.NETからストアドプロシージャを呼び出す際、あるいは、
ストアドプロシージャ実行中に発生しているようです。
ごくまれに発生するのみで、データも含め、同じ環境で実行しても再現はしませんでした。
どのような原因で発生しているのでしょうか?
[EXCEPTION]:ThreadAbortException
[スタックトレース]:
場所 SNINativeMethodWrapper.SNIPacketGetConnection(IntPtr packet)
場所 System.Data.SqlClient.TdsParserStateObject.ProcessSniPacket(IntPtr packet, UInt32 error)
場所 System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
場所 System.Data.SqlClient.TdsParserStateObject.ReadPacket(Int32 bytesExpected)
場所 System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
場所 System.Data.SqlClient.TdsParserStateObject.ReadByte()
場所 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, String resetOptionsString)
場所 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
場所 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
場所 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
場所 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
場所 NisCMS.cDBAccess.f_ExecuteSPDataSet(String procedureName)
場所 NisCMS.cCreateCont.f_CategoryBlockM(String& rstrBlock, String vstrHeader)"
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2007-01-23 17:13
www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34184&forum=7&7

「httpRuntime executionTimeoutの時間が足りなく
エラーが起きていました。 」

の事例があります 該当しますか?
ベータ
会議室デビュー日: 2007/01/23
投稿数: 2
投稿日時: 2007-01-23 20:20
99ri 様
返信ありがとうございます。

現象を再現できないので明確にはわかりませんが、ご指摘の状態とは少し違っているように思われます。
本処理は、簡単に書きますと、「ストアドプロシージャの実行結果を取得し、その内容によってファイルを作成する」といった内容の処理です。
[httpRuntime.executionTimeout]は、machine.config,web.configとも設定して
おりませんので、おそらく既定値(90s or 110s)が使用されていると思われます。
また、ストアドプロシージャ実行に関してのタイムアウト[SqlCommand.CommandTimeout]
も既定値を使用しておりますので、その時間は30sが使用されていると思います。

[httpRuntime.executionTimeout]は、おそらく、ストアドプロシージャ実行の際に、
システムのメソッドが内部的に使用している、DataAdapterメソッドのThread存続時間で
あると認識しています。
仮に、[httpRuntime.executionTimeout]によりタイムアウトが発生しているのであれば、
これよりも先に[SqlCommand.CommandTimeout]のタイムアウトが検出されると思われますが、[SqlCommand.CommandTimeout]のタイムアウトは発生しておりませんでした。

また、エラーとなった直前に生成されたと思われるファイルのタイムスタンプと、今回のエラー発生時刻には2秒ほどの差しかありませんでした。

否定的なことばかり申し上げて大変申し訳ございませんが、
他に何か原因は考えられませんでしょうか?
また、いつかこのようなエラーが発生した場合に、より詳細に原因を追求することが可能となるような、トレース情報などございませんでしょうか?

99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2007-01-26 06:50
ThreadAbortExceptionはスレッドの放棄Abortで発生します
Abortを発生させた大元の例外を把握していますか?

ThreadAbortException例外のメッセージ
Exception.Message     プロパティ

大元の例外
Exception.GetBaseException メソッド
Exception.InnerException プロパティ

またSQLSERVER2003 にSPを適用していますか?

1

スキルアップ/キャリアアップ(JOB@IT)