简体   繁体   中英

insert large data to database using dataset

How to insert about 300 record from dataset into database? It takes so long about 5 minute I want to know is there any way to improve the process using dataset?

edit: this is my code, when user klik sav, it will do the following process:

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;
}

Thanks

You can use SqlBulkCopy class to efficiently copy data to your database.

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

I've just found the solution, when method InsertSkalaGaji called, before Adapter.Update(myDataSet.SkalaGaji) I create a new SkalaGajiDataTable that contain only inserted rows

code:

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

int rowsAffected = Adapter.Update(newSkalaGaji);

and to insert about 300 records, it only takes 4 seconds Thanks all

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM