2013-08-26 180 views
36

我有一個小問題,希望有人能給我一些建議。我正在運行一個SQL命令,但它似乎需要這個命令大約2分鐘才能返回數據,因爲有很多數據。但默認的連接時間是30秒,我該如何增加這個,並將其應用於此命令?增加SQL命令的命令超時

public static DataTable runtotals(string AssetNumberV, string AssetNumber1V) 
{ 
    DataTable dtGetruntotals; 

    try 
    { 
     dtGetruntotals = new DataTable("Getruntotals"); 

     //SqlParameter AssetNumber = new SqlParameter("@AssetNumber", SqlDbType.VarChar, 6); 
     //AssetNumber.Value = AssetNumberV; 

     SqlParameter AssetNumber = new SqlParameter("@AssetNumber", SqlDbType.VarChar, 10); 
     AssetNumber.Value = AssetNumberV; 

     SqlParameter AssetNumber1 = new SqlParameter("@AssetNumber1", SqlDbType.VarChar, 10); 
     AssetNumber1.Value = AssetNumber1V; 

     SqlCommand scGetruntotals = new SqlCommand("EXEC spRunTotals @AssetNumber,@AssetNumber1 ", DataAccess.AssetConnection); 
     // scGetruntotals.Parameters.Add(AssetNumber); 
     scGetruntotals.Parameters.Add(AssetNumber); 
     scGetruntotals.Parameters.Add(AssetNumber1); 

     SqlDataAdapter sdaGetruntotals = new SqlDataAdapter(); 
     sdaGetruntotals.SelectCommand = scGetruntotals; 
     sdaGetruntotals.Fill(dtGetruntotals); 

     return dtGetruntotals; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error Retriving totals Details: Processed with this error:" + ex.Message); 
     return null; 
    } 
} 
+3

考慮將超時值也添加到配置文件中,否則任何調整都將意味着代碼重新部署。 – christiandev

回答

73

需要這個命令約2分鐘返回數據是有大量的數據

糟糕的設計的。考慮在這裏使用分頁。

默認的連接時間爲30秒,我如何增加這個

當你在你的命令面臨timout,因此,你需要增加你的sql command的timout。你可以這樣

// Setting command timeout to 2 minutes 
scGetruntotals.CommandTimeout = 120; 
+0

不用客氣,你可以接受。雖然我會嚴肅地避免使用需要2分鐘的查詢。嘗試使用分頁。 – Ehsan

+0

將超時時間增加到10分鐘或30分鐘的缺點? –

+0

@ManishKumarSingh誰將等待10分鐘以查詢返回結果?這是一個毫秒級的時代。 – Ehsan

14

添加您的SqlCommand超時。請注意時間在第二。

// Setting command timeout to 1 second 
scGetruntotals.CommandTimeout = 1; 
+9

感謝您的寫作,「請注意時間在第二。」 – ShaileshDev

+0

將超時時間增加到10分鐘或30分鐘的缺點? –

+0

曼尼什,你想等待10分鐘或30分鐘的過程來獲取數據?如果它是一個過夜的過程,而且它是唯一的一件事,並且不會在其他地方干擾,那麼30分鐘爲什麼不。或者如果你不等待結果,爲什麼不呢。 – MiscellaneousUser

0

由於需要2分鐘響應您的命令中指定它,您可以通過添加下面的代碼增加超時3分鐘

scGetruntotals.CommandTimeout = 180; 

注意:參數值以秒爲單位。

0

不建議將CommandTimeout設置爲120。如上所述嘗試使用分頁。將CommandTimeout設置爲30被認爲是正常的。除此之外的任何事情都被認爲是不好的方法,並且通常會導致執行失敗。現在世界正在運行MiliSeconds方法。