2010-10-27 85 views

回答

16

你可以在下面的連接上設置的CommandTimeout,而是很多很多,好多想法是花時間和精力來診斷爲什麼超時在首位發生。

即使你通過你的正在增加的CommandTimeout「解決」的問題,你可能在你的數據庫引起其他阻塞問題。尋找阻止查詢或糟糕的查詢計劃,或設計糟糕的表和索引。

1

什麼你做什麼,比在存儲過程中固定SQL對方只是掩蓋了真正的問題(在SQL)。

您需要提出一個關於加速您的過程,發佈表格以及存儲過程代碼的問題,以便它可以一勞永逸地修復。

+1

我知道,但100萬點的插入,我別無選擇...... – 2010-10-27 13:38:37

+4

那將是擺在原來的職位非常重要的信息,你不覺得? – 2010-10-27 14:02:05

+1

來自單個存儲過程調用的1百萬次插入?這是怎麼回事? – 2010-10-27 15:52:30

3
using (var conn = new SqlConnection(ConnectionStrings.toMyDB)) 
{ 
    conn.Open(); 
    using (var cmd = new SqlCommand("myProc", conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandTimeout = 30; // Increase this to allow the proc longer to run 
     cmd.Parameters.AddWithValue("@Param", myParam); 
     cmd.ExecuteNonQuery(); 
    } 
} 
+0

帕特里斯Pezillier被詢問超時在EF,你的例子是ADO.NET – 2011-06-27 16:09:57

+0

我怎麼能結果傳遞到DataSet?我現在正在使用這項技術。 – 2017-11-10 18:33:00

4
 using (var context = new MyDbEntities()) 
     { 
      context.CommandTimeout = 600; 
      context.MyLongRunningStoredProc(); 
     } 
0

使用索引解決我的問題,我發現與ExecuteStoreCommand執行存儲過程具有時間不一樣,如SQL。

可以使用SQL Management Studio中,以便找到你需要的指數,選擇您的存儲過程的SQL代碼,右擊「顯示估計的執行計劃」採取建議的指數。這應該優化您的存儲過程。