私は、IBM DB2 .NETプロバイダ(IBM.Data.DB2)を使用してDB2データベース(v9.7)に接続するプログラムを.NETで作成しています。 selectクエリを実行します。DB2で割り当て時間を超過するとSQLクエリの実行が終了する
送信された選択クエリがデータを返すために5秒以上かかる場合、プログラムはSQL実行を終了する必要があります。
これをIBM's documentationとして実装するには、接続でQueryTimeoutパラメータを使用できます。
string connStr = "Server=server:12345;Database=db;UID=user;PWD=pass; QueryTimeout = 5;";
DB2Connection conn = null;
DB2Command cmd = null;
conn = new DB2Connection(connStr);
conn.Open();
Console.WriteLine("IBM DB2: " + conn.IsOpen);
if (conn.IsOpen)
{
Console.WriteLine(conn.ConnectionTimeout);
cmd = conn.CreateCommand();
cmd.CommandText = "select * from user.orders";
DB2DataReader reader = cmd.ExecuteReader();
int counter = 0;
while (reader.Read())
{
counter += 1;
Console.WriteLine(reader.GetDB2Int64(0));
}
reader.Close();
}
conn.Close();
winSQLでクエリを実行したとき、クエリの実行に約20秒かかりました。しかし、私がこのプログラムでそれを実行すると、同じ20秒がかかりました。ドキュメントごとに、クエリは5秒で終了するはずです。
なぜ実行は停止していませんか?
PS:私はまた、5にcmd.CommandTimeoutを設定しようとしました、それはまだ実行を停止しません。
_cmd.CommandTimeout = 5; _?を設定するとどうなりますか? – Steve
@スティーブ、それはまだ20秒間実行されます。 – nJoshi
どのように20秒を測定しますか?あなたのケースでは、カーソルからフェッチしているので、各CLI呼び出しは別々のタイムアウトの対象になると仮定しているので、 'ExecuteReader'(おそらくカーソルを開くだけです)または' Read'(カーソルからフェッチする可能性があります)タイムアウトがキックインするために5秒を超える。 – mustaccio