PostgreSQL pasti memiliki salinan massal (sebenarnya disebut copy
), dan memiliki pembungkus yang bagus untuk .NET. Jika Anda memuat, Anda ingin menggunakan NpgsqlCopyIn
, dan jika Anda mengekstrak data, Anda dapat menggunakan NpgsqlCopyOut.
Pertanyaan Anda agak kabur tentang detail -- Saya tidak tahu bidang dalam datatable Anda atau apa pun tentang database Anda yang sebenarnya, jadi ambil ini sebagai contoh singkat tentang cara menyisipkan data secara massal ke dalam tabel menggunakan C#/PostgreSQL:
NpgsqlCopyIn copy = new NpgsqlCopyIn("copy table1 from STDIN WITH NULL AS '' CSV;",
conn);
copy.Start();
NpgsqlCopySerializer cs = new NpgsqlCopySerializer(conn);
cs.Delimiter = ",";
foreach (var record in RecordList)
{
cs.AddString(record.UserId);
cs.AddInt32(record.Age);
cs.AddDateTime(record.HireDate);
cs.EndRow();
}
cs.Close();
copy.End();
-- Sunting 27/8/2019 --
Konstruksi untuk Npgsql telah sepenuhnya berubah. Di bawah ini adalah boilerplate untuk contoh yang sama di atas, menggunakan impor biner (teks juga tersedia):
using (var writer = conn.BeginBinaryImport(
"copy user_data.part_list from STDIN (FORMAT BINARY)"))
{
foreach (var record in RecordList)
{
writer.StartRow();
writer.Write(record.UserId);
writer.Write(record.Age, NpgsqlTypes.NpgsqlDbType.Integer);
writer.Write(record.HireDate, NpgsqlTypes.NpgsqlDbType.Date);
}
writer.Complete();
}