Apa yang telah saya lakukan sebelumnya adalah melakukan penyisipan massal dari data ke tabel temp, dan kemudian menggunakan perintah atau prosedur tersimpan untuk memperbarui data yang terkait tabel temp dengan tabel tujuan. Tabel temp adalah langkah ekstra, tetapi Anda dapat memperoleh peningkatan kinerja dengan penyisipan massal dan pembaruan besar-besaran jika jumlah barisnya besar, dibandingkan dengan memperbarui data baris demi baris.
Contoh:
public static void UpdateData<T>(List<T> list,string TableName)
{
DataTable dt = new DataTable("MyTable");
dt = ConvertToDataTable(list);
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SchoolSoulDataEntitiesForReport"].ConnectionString))
{
using (SqlCommand command = new SqlCommand("", conn))
{
try
{
conn.Open();
//Creating temp table on database
command.CommandText = "CREATE TABLE #TmpTable(...)";
command.ExecuteNonQuery();
//Bulk insert into temp table
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(conn))
{
bulkcopy.BulkCopyTimeout = 660;
bulkcopy.DestinationTableName = "#TmpTable";
bulkcopy.WriteToServer(dt);
bulkcopy.Close();
}
// Updating destination table, and dropping temp table
command.CommandTimeout = 300;
command.CommandText = "UPDATE T SET ... FROM " + TableName + " T INNER JOIN #TmpTable Temp ON ...; DROP TABLE #TmpTable;";
command.ExecuteNonQuery();
}
catch (Exception ex)
{
// Handle exception properly
}
finally
{
conn.Close();
}
}
}
}
Perhatikan bahwa koneksi tunggal digunakan untuk melakukan seluruh operasi, agar dapat menggunakan tabel temp di setiap langkah, karena cakupan tabel temp adalah per koneksi.