我使用ADO.Net + C#+ VSTS 2008 + ADO.Net連接到SQL Server 2008 Enterprise。我使用的是與此處提到的幾乎相同的模式/示例 - 使用ADO.Net DataReader通過一個條目(行)檢索數據一個條目(行)。ADO.Net DataReader超時問題
http://msdn.microsoft.com/en-us/library/haa3afyz.aspx
我的問題是,如果我在此示例中設置的SqlCommand超時, 1.我認爲超時適用於我們能有多少時間最大值用於檢索一個specifc行,而不是總整個數據輸入循環的超時時間?
BTW:環路我的意思是,
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
2. 和超時只在乎它需要多少時間從數據庫中獲取的數據輸入,以及超時無關用多少時間,我們處理(例如,如果我們將超時設置爲20秒,並且如果從數據庫檢索一個數據條目需要1秒,並且我的應用程序邏輯需要30秒來操縱數據條目,則超時將永遠不會發生)。
正確理解?
感謝Marc,1.你的意思是DataReader的場景,當我收到DataReader實例時,超時不會有任何影響? 2.如果是,我的困惑是,在DataReader之前我讀了一些文檔,ADO.Net以流式方式檢索數據,即在創建DataReader時並不是從SQL Server檢索所有數據。如果這是真的,那麼ADO.Net客戶端和SQL Server服務器端之間應該有更多的傳輸?但是正如你所說的那樣,超時在DataReader創建後不會再受到影響,所以沒有超時控制用於進一步的數據流傳輸? – George2 2009-09-28 04:15:50
我對我的上述評論的關注是,來客戶將持有DataReader很長一段時間,我認爲在流模式下(因爲ADO.Net無法預測客戶端是想讀取更多數據還是隻是打破閱讀器循環),所以連接將始終保持活動狀態。我想對這種行爲有一個超時控制,迫使這種長時間的閱讀器關閉/釋放ADO.Net的連接。任何似乎SqlCommand(用於創建DataReader)超時不是我在找什麼?謝謝。 – George2 2009-09-28 04:19:39
您是絕對正確的:如果您長時間保持DataReader打開狀態,則底層連接將在同一時間保持打開狀態。有沒有超時阻止你這樣做 - 這是你的責任,以確保你不會這麼長時間 – 2009-09-28 04:50:27