【问题标题】:insert large data to database using dataset使用数据集将大数据插入数据库
【发布时间】:2012-11-11 22:02:05
【问题描述】:

如何从数据集中插入大约 300 条记录到数据库中? 需要5分钟左右 我想知道有没有什么方法可以使用数据集来改进这个过程?

编辑: 这是我的代码,当用户单击 sav 时,它将执行以下过程:

public void ProcessSkalaGaji(MyDataSet myDataSet, DateTime tanggalBerlaku, decimal percentage)
{
   GenerateNewSkalaGaji(myDataSet, tanggalBerlaku, percentage);
   InsertSkalaGaji(myDataSet);
}

private void GenerateNewSkalaGaji(MyDataSet myDataSet, DateTime tanggalBerlaku, decimal percentage)
{
   // GetLastSkalaGaji returns about 300 rows
   MyDataSet.SkalaGajiDataTable skalaGajiTable = GetLastSkalaGaji();

   foreach (MyDataSet.SkalaGajiRow skalaGajiRow in skalaGajiTable.Rows)
   {
      MyDataSet.SkalaGajiRow newSkalaGajiRow = myDataSet.SkalaGaji.NewSkalaGajiRow();
      newSkalaGajiRow.TanggalBerlaku = tanggalBerlaku;
      newSkalaGajiRow.Golongan = skalaGajiRow.Golongan;
      newSkalaGajiRow.MasaKerja = skalaGajiRow.MasaKerja;
      newSkalaGajiRow.GajiPokok = skalaGajiRow.GajiPokok + (skalaGajiRow.GajiPokok * percentage / 100);

      myDataSet.SkalaGaji.AddSkalaGajiRow(newSkalaGajiRow);
   }
}

private string InsertSkalaGaji(MyDataSet myDataSet)
{
   string errorMsg = string.Empty;

   if (myDataSet.HasChanges() && !myDataSet.HasErrors)
   {
      int rowsAffected = Adapter.Update(myDataSet.SkalaGaji);

      if (rowsAffected == 0)
      {
         errorMsg = "No rows inserted! Please contact your administrator";
      }
   }

   return errorMsg;
}

谢谢

【问题讨论】:

  • 发布一些代码,以便我们可以检测到哪里需要优化
  • 300 实际上是指 3M 或者你为什么提到 large?您还应该提到 sql 和表模式。你在使用交易吗?
  • 每条记录 1 秒?贴一些代码。
  • 通常数据集不会花很长时间将其插入数据库。特别是当它只有 300 行时。所以是的,正如 Agustin Meriles 所说,如果你能粘贴一些代码会很有帮助。
  • @tim: 我应该怎么称呼?抱歉我的英语不好 :) 我已经编辑了问题,感谢您的关注

标签: c# insert dataset large-data


【解决方案1】:

我刚刚找到了解决方案,当调用方法 InsertSkalaGaji 时,在 Adapter.Update(myDataSet.SkalaGaji) 之前我创建了一个只包含插入行的新 SkalaGajiDataTable

代码:

MyDataSet.SkalaGajiDataTable newSkalaGaji = (MyDataSet.SkalaGajiDataTable)
myDataSet.SkalaGaji.GetChanges(DataRowState.Added);

int rowsAffected = Adapter.Update(newSkalaGaji);

插入大约 300 条记录,只需要 4 秒 谢谢大家

【讨论】:

    【解决方案2】:

    您可以使用SqlBulkCopy 类有效地将数据复制到您的数据库中。

    var bulkCopy = new SqlBulkCopy(yourConnection);
    bulkCopy.DestinationTableName = "dbo.YourTable";
    var table = GetLastSkalaGaji();
    bulkCopy.WriteToServer(table);
    

    【讨论】:

    • 感谢 RePierre,它可能是替代品
    猜你喜欢
    • 1970-01-01
    • 2017-08-22
    • 2011-01-27
    • 2013-01-23
    • 2017-01-20
    • 2014-01-13
    • 2013-04-04
    • 2016-09-18
    • 2014-08-28
    相关资源
    最近更新 更多