2013-06-05 31 views
0

我插入數據從終端數據庫訪問通過WebService的需要很長的時間,將行插入到數據庫 - 數據並行方法

這樣的:

using (Conn = new OleDbConnection(Work_Connect)) 
{ 
    foreach (DataRow R in ds.Tables["MyCount"].Rows) 
    { 
     U_TermNum = TermNum; 
     U_Id = Id; 
     U_Bar = R["Bar"].ToString().Trim(); 
     U_Qty = R["Qty"].ToString().Trim(); 
     U_Des = R["Des"].ToString().Trim(); 
     U_UserName = UserName; 
     U_UserID = UserID; 

     SQL = "INSERT INTO MyTbl (ID,Bar,Qty,TermNum,Des,UserName,UserID) VALUES (@A,@B,@C,@D,@E,@F,@G)"; 

     using (OleDbCommand Cmd4 = new OleDbCommand(SQL, Conn)) 
     { 
      Cmd4.Parameters.AddWithValue("@A", Convert.ToInt32(U_Id)); 
      Cmd4.Parameters.AddWithValue("@B", U_Bar); 
      Cmd4.Parameters.AddWithValue("@C", Convert.ToDouble(U_Qty)); 
      Cmd4.Parameters.AddWithValue("@D", U_TermNum); 
      Cmd4.Parameters.AddWithValue("@E", U_Des); 
      Cmd4.Parameters.AddWithValue("@F", U_UserName); 
      Cmd4.Parameters.AddWithValue("@G", U_UserID); 
      Cmd4.ExecuteNonQuery(); 

     } 

    } 

我嘗試從20終端的發送

如果我發送1 - >等待10秒發送2 - >等待10秒 - > ..........它工作速度非常快,並且所有的終端在1分鐘後結束髮送

但如果我發送並行在 - >它的工作非常緩慢,所有終端在6分鐘後結束

爲什麼?以及如何改變我的代碼,我可以並行發送並快速結束?

現在我注意到,並非所有的行被插入到數據庫 (當我想要把他們都在 - 一個) 如何處理這個問題?

+0

是否使用異步連接爲您工作?請參閱此示例http://msdn.microsoft.com/en-us/library/ca56w9se.aspx – Amitd

+2

「並行」是指使用並行庫還是同時運行20個獨立客戶端的某個應用程序? –

+0

感謝您的幫助,異步連接將在訪問工作? – Gold

回答

0

如果您發現應用程序在負載下陷入困境,那麼使用Access後端數據庫可能不是您的情況的正確選擇。具體做法是:

  • ACE /噴氣機一般不推薦(訪問)數據庫的Web應用程序的使用,其中的併發連接數千差萬別,網絡流量可以「秒殺」遠高於ACE /活動的水平Jet的「舒適區域」。

  • Access開發人員之間的非正式討論傾向於將~10個併發用戶視爲Access應用程序開始減速的點,並且約25個併發用戶經常被認爲是實際限制。這些都是非常一般的指導原則,一些Access應用程序可以處理更多的併發用戶,具體取決於他們的使用模式(例如大多數偶爾插入和更新的查找)。

所以,如果你的應用程序會定期有〜20個併發連接錘打插入到數據庫一樣快,他們就可以,那麼你應該考慮你的後端數據庫切換到這是更好 - 一個基於服務器的產品,適合這種類型的活動。

+0

我別無選擇,這是客戶計算機上安裝的內容。有什麼辦法嗎? – Gold

+0

如果Access數據庫無法處理該環境的峯值負載,則唯一的解決方法是限制這些峯值負載,例如,通過限制連接到您的Web服務/應用程序的數量。如果客戶不能接受,那麼他們將需要使用一個數據庫後端來處理峯值負載。 –

相關問題