- PR -

DataAdapterの例外エラーの回避方法

投稿者投稿内容
NEKO
常連さん
会議室デビュー日: 2004/08/27
投稿数: 21
投稿日時: 2004-10-01 11:10
.CommandTimeout = clsGlobal.DbCommandTimeout

clsGlobal.DbCommandTimeoutの値は、0でした。
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2004-10-01 15:35
引用:

NEKOさんの書き込み (2004-10-01 09:51) より:
KATEN_CODEが、'1000'の場合は、エラーにならない(検索結果:100件)
KATEN_CODEが、'2201'の場合は、エラーになる。 (検索結果:15000件)


15000件から察するにタイムアウトエラーかと思われます。
引用:

NAL-6295さんの書き込み (2004-09-30 23:41) より:
コネクションおよびweb.configで設定できるタイムアウト値を適切に設定してあげれば良いです。


NAL-6295さんの仰る方法にて回避するか、もしくは15000件ものデータを
必ず処理する必要がないのであれば、設計等を見直せばよいのではないで
しょうか。

[追記]
タイムアウトエラーかどうかは、クエリアナライザ等にてSQL文を実行して
どのぐらいの時間か確認してみましょう。

[ メッセージ編集済み 編集者: えんぞ@見習 編集日時 2004-10-01 15:37 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-01 21:11
どなたも指摘されていないのが、ちょっと不思議なのですが・・・
引用:
コード:
SELECT
	CEILING(CAST(COUNT(*) AS MONEY) / 5) SHEET_COUNT
FROM
	T_IRAINUSI LEFT OUTER JOIN
		(SELECT * FROM T_TODOKESAKI
			WHERE DELETE_FLG='0' AND STOP_FLG='0') T_TODOKESAKI
	ON T_IRAINUSI.IRAINUSI_NO=T_TODOKESAKI.IRAINUSI_NO
WHERE
	T_IRAINUSI.DELETE_FLG='0'
	AND T_IRAINUSI.JIZEN_FLG<>'1'
	AND T_IRAINUSI.KATEN_CODE>='2201'
	AND T_IRAINUSI.KATEN_CODE<='2201'
GROUP BY
	T_IRAINUSI.IRAINUSI_NO



とっても不思議。。。いや、SQL Serverはよく知らないので、私が間違っているのかもしれませんが、と前置きして。

 まず、フラグ関係の列ですが、型はなんですか?数値?文字列?数値で定義しているなら、シングルクォーテーションは不要ですよね。ここで数値を文字列に変換するという、余分な操作が入り、遅くなります。
 また、フラグであるなら、bit型にしておけばよいのでは?

 次に、KATEN_CODEですが、これも型はなんでしょう?文字列の大小関係って、何が調べられるの?
 さらに、同じ値の以上と以下を検査して、何がしたいの?単にイコールでは、なぜダメなの?入力は2つ有るのなら、BETWEEN演算子というものもあります。もっとも、文字列に対して使用できるかどうか、知りませんけど。

 T_IRAINUSIテーブルに結合しているテーブルですが、単に削除などで絞り込むだけなら、副問い合わせにせず、全部結合してから落とす方が、(作っているなら)インデックスが有効に使われるのでは?

 SQL Serverには、Oracleでいうところの「実行計画」を取るコマンドはないのでしょうか?インデックスの張り方などを整理すれば、1万5千件ぐらいでタイムアウトは発生しないように思います。

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