PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chèn toàn bộ giá trị của DataTable hàng loạt vào bảng postgreSQL

Chèn đơn giản bằng tham số

Dự án của bạn sẽ cần tham chiếu đến assembly sau:Npgsql . Nếu tham chiếu này không hiển thị trong Visual Studio , sau đó:

  1. duyệt đến thư mục cài đặt của trình kết nối
  2. Thực thi:GACInstall.exe
  3. Khởi động lại Visual Studio .

Bảng mẫu

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;

Mã mẫu

Đảm bảo sử dụng các chỉ thị sau:

using Npgsql;
using NpgsqlTypes;

Nhập mã nguồn sau vào phương thức của bạn:

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

Suy nghĩ về hiệu suất

Bài đăng ban đầu không đề cập đến các yêu cầu về hiệu suất. Nó được yêu cầu rằng giải pháp phải:

  1. chèn bằng DataTable
  2. chèn dữ liệu mà không sử dụng vòng lặp

Nếu bạn đang chèn một lượng lớn dữ liệu, thì tôi khuyên bạn nên xem xét các tùy chọn hiệu suất của mình. The Postgres tài liệu gợi ý rằng bạn:

  • Tắt tính năng tự động gửi
  • Sử dụng COPY lệnh
  • Xóa các chỉ mục
  • Xóa các ràng buộc về khóa ngoại
  • v.v.

Để biết thêm thông tin về cách tối ưu hóa chèn Postgres, vui lòng xem tại:

Ngoài ra, có rất nhiều yếu tố khác có thể ảnh hưởng đến hiệu suất của hệ thống. Để có phần giới thiệu cấp cao, hãy xem:

Các tùy chọn khác

  • Trình kết nối .NET có hỗ trợ Postgres Copy lệnh?
    • Nếu không, bạn có thể tải xuống mã nguồn cho Npgsql trình kết nối và thêm BulkCopy() của riêng bạn phương pháp. Trước tiên, hãy nhớ xem lại thỏa thuận cấp phép của mã nguồn.
  • Kiểm tra xem liệu Postgres hỗ trợ Tham số giá trị bảng .
    • Cách tiếp cận này cho phép bạn chuyển một bảng vào một Postgres chức năng này sau đó có thể chèn dữ liệu trực tiếp vào đích.
  • Mua một Postgres Trình kết nối .NET từ một nhà cung cấp có tính năng bắt buộc.

Tài liệu tham khảo bổ sung



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi vai trò sau khi kết nối với cơ sở dữ liệu

  2. Nhận ngày thứ hai của tuần này ở Postgres?

  3. Loại trừ các định nghĩa hàm khi kết xuất cơ sở dữ liệu PostgreSQL

  4. Cài đặt icu4c phiên bản 63 với Homebrew

  5. Kiểm tra xem một mảng Postgres JSON có chứa một chuỗi hay không