PostgreSQL zdecydowanie ma kopię zbiorczą (w rzeczywistości nazywa się to copy
) i ma ładne opakowanie dla platformy .NET. Jeśli ładujesz, chcesz użyć NpgsqlCopyIn
, a jeśli wyodrębniasz dane, możesz użyć NpgsqlCopyOut.
Twoje pytanie jest trochę niejasne w szczegółach — nie znam pól w Twojej tabeli danych ani niczego o rzeczywistej bazie danych, więc weź to jako krótki przykład zbiorczego wstawiania danych do tabeli za pomocą 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();
-- Edytuj 27.08.2019 --
Konstrukcja dla Npgsql uległa całkowitej zmianie. Poniżej znajduje się schemat dla tego samego przykładu powyżej, przy użyciu importu binarnego (tekst jest również dostępny):
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();
}