2013-07-04 93 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

相关问题