PostgreSQL har bestemt en massekopi (det hedder faktisk copy
), og den har en fin indpakning til .NET. Hvis du indlæser, vil du bruge NpgsqlCopyIn
, og hvis du udtrækker data, kan du bruge NpgsqlCopyOut.
Dit spørgsmål er lidt vagt med hensyn til detaljer -- jeg kender ikke felterne i din datatabel eller noget om din faktiske database, så tag dette som et kort eksempel på, hvordan man masseindsætter data i en tabel ved hjælp af 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();
-- Rediger 27/8/2019 --
Konstruktionen til Npgsql er fuldstændig ændret. Nedenfor er en kedelplade for det samme eksempel ovenfor, ved hjælp af binær import (tekst er også tilgængelig):
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();
}