我在使用IBM DB2 .NET提供程序(IBM.Data.DB2)連接到DB2數據庫(v9.7)的.NET中創建程序並運行選擇查詢。如果SQL查詢執行超過DB2中分配的時間,則執行SQL查詢執行
如果提交的select查詢花費超過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:我也試過cmd.CommandTimeout設置爲5,它仍然不會停止執行。
如果將_cmd.CommandTimeout設置爲5,會發生什麼?_? – Steve
@Steve,它仍然運行20秒。 – nJoshi
你如何衡量你的20秒?在你的情況下,由於你從遊標中獲取數據,我認爲每個CLI調用都受到單獨的超時限制,所以'ExecuteReader'(可能只是打開一個遊標)或者任何'Read'(可能是從遊標中獲取)在超時時間超過5秒後纔會啓動。 – mustaccio