2010-03-22 87 views
0

我正在執行一個來自C#代碼的SQL存儲過程,但它根本沒有響應。沒有異常或錯誤產生。處理過程猶如掛起。存儲過程由多個更新語句和一個select語句組成。存儲過程獨立運行,需要大約3-5分鐘才能執行,而從C#代碼調用時,即使在20分鐘或更長時間後,它也不響應。當我評論大多數更新陳述時,只有一個或兩個執行查詢能夠運行。我甚至增加了commandTimeout時間。executenonquery調用參數化存儲過程沒有響應

請建議,因爲這是緊急的事情。請看以下的C#代碼:

C#功能:

private void PanDatabase(DateTime StartDate, DateTime EndDate) 
    { 
     SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connectionString"]); 

     SqlCommand cmd = new SqlCommand("PanData", conn); 

     cmd.CommandType = System.Data.CommandType.StoredProcedure; 

     cmd.Parameters.Add(new SqlParameter("@start_date", StartDate.ToShortDateString())); 
     cmd.Parameters.Add(new SqlParameter("@end_date", EndDate.ToShortDateString())); 
     cmd.Parameters.Add(new SqlParameter("@period_status", _periodPan)); 

     conn.Open(); 

     cmd.CommandTimeout = 9000; 

     cmd.ExecuteNonQuery(); 

     cmd.Dispose(); 
     conn.Close(); 
     conn.Dispose(); 
    } 
+4

從Web服務器訪問3-5分鐘的查詢?這有困難寫在它上面。 :/ – 2010-03-22 13:44:28

回答

1

通過.NET代碼是在序列化事務中運行默認。這可能會導致一些鎖定?在單個存儲過程中,我不認爲這是一個問題,但是如果您從.Net調用多個數據庫查詢,那麼它們可能會相互干擾。

您可以通過查看DB Manager「活動監視器」*中的作業狀態來驗證鎖定。正如馬丁所言,應該使用SQL Profiler進行更詳細的診斷。 (*僅當您擁有足夠的數據庫權限時)。

通過向.Net代碼添加一些System.Diagnostics.Trace語句來檢查對同一個Stored Proc的多個調用。

0

答案很簡單,就是加...

cmd.Parameters.Clear(); 

...添加新的參數,並再次調用ExecuteNonQuery()之前。

相關問題