2013-07-04 95 views
0

我在SQL server.Here插入數據的代碼:數據插入花費過多時間

SqlParameter[] param = new SqlParameter[1]; 
      param[0] = new SqlParameter(); 
      param[0].ParameterName = "@Exch"; 
      param[0].SqlDbType = SqlDbType.Int; 
      param[0].Value = "BSE"; 
      formObjSqlConnection.SQLConnection.Executes("LPExch..DeleteVarMargin", param); 
      foreach (BseVar objBseVar in objListNseData) 
      { 

       currentIndex++; 
       param = new SqlParameter[10]; 
       param[0] = new SqlParameter(); 
       param[0].ParameterName = "@Exch"; 
       param[0].SqlDbType = SqlDbType.Char; 
       param[0].Value = "BSE"; 

       param[1] = new SqlParameter(); 
       param[1].ParameterName = "@Symbol"; 
       param[1].SqlDbType = SqlDbType.Char; 
       param[1].Size = 10; 
       param[1].Value = objBseVar.Symbol; 



       param[2] = new SqlParameter(); 
       param[2].ParameterName = "@Series"; 
       param[2].SqlDbType = SqlDbType.Char; 
       param[2].Value = "EQ"; 

       param[3] = new SqlParameter(); 
       param[3].ParameterName = "@SecurityVar"; 
       param[3].SqlDbType = SqlDbType.SmallMoney; 

       param[3].Value = objBseVar.SecurityVar; 

       param[4] = new SqlParameter(); 
       param[4].ParameterName = "@IndexVar"; 
       param[4].SqlDbType = SqlDbType.SmallMoney; 

       param[4].Value = 0; 


       param[5] = new SqlParameter(); 
       param[5].ParameterName = "@VarMargin"; 
       param[5].SqlDbType = SqlDbType.SmallMoney; 

       param[5].Value = objBseVar.IndexVar; 

       param[6] = new SqlParameter(); 
       param[6].ParameterName = "@AdhocMargin"; 
       param[6].SqlDbType = SqlDbType.SmallMoney; 

       param[6].Value = objBseVar.SecurityVar - objBseVar.IndexVar; 


       param[7] = new SqlParameter(); 
       param[7].ParameterName = "@VarMarginRate"; 
       param[7].SqlDbType = SqlDbType.SmallMoney; 

       param[7].Value = objBseVar.IndexVar; 

       formObjSqlConnection.SQLConnection.Executes("LPExch..UpdateOrAddCashVarMarginBSE", param); 
       if (Convert.ToInt32(1/progressChange * currentIndex) <= 100) 
        objImportMaster.UpdateProgressBar(Convert.ToInt32(1/progressChange * currentIndex)); 
      } 
      formObjSqlConnection.SQLConnection.Executes("LPExch..UpdateCashVarMarginBSEScripNo"); 

有沒有其他辦法可以在database.The問題插入數據是數據庫是花費太多的時間來插入數據。我也更新其他用戶界面的進度條。 這是插入緩慢的原因嗎? 我們可以用其他方式來插入數據嗎?

+0

您可以從循環中刪除參數的創建並僅更新每個循環的值。但我不認爲你會有很大的收穫。最好的選擇是使用[Table Valued Param](http://msdn.microsoft.com/en-us/library/bb510489.aspx) – Steve

+0

請幫助我加速數據插入。 –

+0

@ Steve我怎樣才能爲這個循環寫同樣的東西。使用Table Valued Param。 –

回答

1

現在您每次發送一個插頁。這很慢。如果您可以更改數據庫,請查找table valued parameters並將表傳遞給您的函數,以便您可以只發送一次所有記錄。

如果您可以直接訪問表格,也​​可以使用bulk copy

+0

如何在這種情況下執行相同的操作。請引導我。我閱讀鏈接,但無法找到實現它的方法。:( –

0

如果您嘗試插入很多記錄,請考慮使用批量複製,它非常快。 有一個示例here

相關問題