PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Bulk C# datatable alla tabella postgresql

PostgreSQL ha sicuramente una copia di massa (in realtà si chiama copy ), e ha un bel wrapper per .NET. Se stai caricando, vuoi usare NpgsqlCopyIn e se stai estraendo dati puoi usare NpgsqlCopyOut.

La tua domanda è un po' vaga sui dettagli:non conosco i campi nel tuo datatable o nulla sul tuo database reale, quindi prendi questo come un breve esempio su come inserire dati in blocco in una tabella usando 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();

-- Modifica 27/08/2019 --

Il costrutto per Npgsql è completamente cambiato. Di seguito è riportato un boilerplate per lo stesso esempio sopra, utilizzando l'importazione binaria (è disponibile anche il testo):

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