PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Masukkan seluruh nilai massal DataTable ke dalam tabel postgreSQL

Sisipkan Sederhana Menggunakan Parameter

Proyek Anda perlu mereferensikan Majelis berikut:Npgsql . Jika referensi ini tidak terlihat dalam Visual Studio , maka:

  1. jelajahi folder instalasi konektor
  2. Jalankan:GACInstall.exe
  3. Mulai ulang Visual Studio .

Tabel Contoh

CREATE TABLE "OrderHistory"
(
  "OrderId" bigint NOT NULL,
  "TotalAmount" bigint,
  CONSTRAINT "OrderIdPk" PRIMARY KEY ("OrderId")
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "OrderHistory"
  OWNER TO postgres;
GRANT ALL ON TABLE "OrderHistory" TO postgres;
GRANT ALL ON TABLE "OrderHistory" TO public;
ALTER TABLE "OrderHistory" ALTER COLUMN "OrderId" SET (n_distinct=1);

GRANT SELECT("OrderId"), UPDATE("OrderId"), INSERT("OrderId"), REFERENCES("OrderId") ON "OrderHistory" TO public;
GRANT SELECT("TotalAmount"), UPDATE("TotalAmount"), INSERT("TotalAmount"), REFERENCES("TotalAmount") ON "OrderHistory" TO public;

Contoh Kode

Pastikan untuk menggunakan arahan berikut:

using Npgsql;
using NpgsqlTypes;

Masukkan kode sumber berikut ke dalam metode Anda:

// Make sure that the user has the INSERT privilege for the OrderHistory table.
NpgsqlConnection connection = new NpgsqlConnection("PORT=5432;TIMEOUT=15;POOLING=True;MINPOOLSIZE=1;MAXPOOLSIZE=20;COMMANDTIMEOUT=20;COMPATIBLE=2.2.4.3;DATABASE=test;HOST=127.0.0.1;PASSWORD=test;USER ID=test");

connection.Open();

DataSet dataSet = new DataSet();

NpgsqlDataAdapter dataAdapter = new NpgsqlDataAdapter("select * from OrderHistory where OrderId=-1", connection);
dataAdapter.InsertCommand = new NpgsqlCommand("insert into OrderHistory(OrderId, TotalAmount) " +
                        " values (:a, :b)", connection);
dataAdapter.InsertCommand.Parameters.Add(new NpgsqlParameter("a", NpgsqlDbType.Bigint));
dataAdapter.InsertCommand.Parameters.Add(new NpgsqlParameter("b", NpgsqlDbType.Bigint));
dataAdapter.InsertCommand.Parameters[0].Direction = ParameterDirection.Input;
dataAdapter.InsertCommand.Parameters[1].Direction = ParameterDirection.Input;
dataAdapter.InsertCommand.Parameters[0].SourceColumn = "OrderId";
dataAdapter.InsertCommand.Parameters[1].SourceColumn = "TotalAmount";

dataAdapter.Fill(dataSet);

DataTable newOrders = dataSet.Tables[0];
DataRow newOrder = newOrders.NewRow();
newOrder["OrderId"] = 20;
newOrder["TotalAmount"] = 20.0;

newOrders.Rows.Add(newOrder);
DataSet ds2 = dataSet.GetChanges();
dataAdapter.Update(ds2);
dataSet.Merge(ds2);
dataSet.AcceptChanges();

connection.Close();

Pemikiran Tentang Kinerja

Posting asli tidak menyebutkan persyaratan kinerja. Diminta agar solusinya harus:

  1. masukkan menggunakan DataTable
  2. memasukkan data tanpa menggunakan loop

Jika Anda memasukkan sejumlah besar data, maka saya sarankan Anda melihat opsi kinerja Anda. Postgres dokumentasi menyarankan agar Anda:

  • Nonaktifkan Autocommit
  • Gunakan COPY perintah
  • Hapus indeks
  • Hapus Batasan Kunci Asing
  • dst.

Untuk informasi lebih lanjut tentang mengoptimalkan sisipan Postgres, silakan lihat:

Juga, ada banyak faktor lain yang dapat memengaruhi kinerja sistem. Untuk pengenalan tingkat tinggi, lihat:

Opsi Lain

  • Apakah konektor .NET mendukung Postgres Copy perintah?
    • Jika tidak, Anda dapat mengunduh kode sumber untuk Npgsql konektor dan tambahkan BulkCopy() Anda sendiri metode. Pastikan untuk meninjau perjanjian lisensi kode sumber terlebih dahulu.
  • Periksa untuk melihat apakah Postgres mendukung Parameter Nilai Tabel .
    • Pendekatan ini memungkinkan Anda memasukkan tabel ke dalam Postgres fungsi yang kemudian dapat memasukkan data langsung ke tujuan.
  • Beli Postgres Konektor .NET dari vendor yang menyertakan fitur yang diperlukan.

Referensi Tambahan



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL MAX dan GROUP BY

  2. Menyimpan properti dinamis objek dalam SQL

  3. Psycopg2 :Buat tabel dalam prosedur tersimpan Postgres

  4. Menyebarkan Django ke Heroku (Kesalahan Psycopg2)

  5. Apa yang baru di Postgres-XL 9.6