पैरामीटर का उपयोग करके सरल सम्मिलित करें
आपके प्रोजेक्ट को निम्नलिखित असेंबली को संदर्भित करने की आवश्यकता होगी:Npgsql
. अगर यह संदर्भ विजुअल स्टूडियो में दिखाई नहीं दे रहा है , फिर:
- कनेक्टर के स्थापना फ़ोल्डर में ब्राउज़ करें
- निष्पादित करें:
GACInstall.exe
- पुनरारंभ करें विजुअल स्टूडियो ।
नमूना तालिका
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;
नमूना कोड
निम्नलिखित निर्देशों का उपयोग करना सुनिश्चित करें:
using Npgsql;
using NpgsqlTypes;
अपनी विधि में निम्न स्रोत कोड दर्ज करें:
// 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();
प्रदर्शन पर विचार
मूल पोस्टिंग ने प्रदर्शन आवश्यकताओं का कोई उल्लेख नहीं किया। यह अनुरोध किया गया था कि समाधान अवश्य ही:
- एक
DataTable
का उपयोग करके सम्मिलित करें - लूप का उपयोग किए बिना डेटा डालें
यदि आप महत्वपूर्ण मात्रा में डेटा सम्मिलित कर रहे हैं, तो मेरा सुझाव है कि आप अपने प्रदर्शन विकल्पों पर एक नज़र डालें। पोस्टग्रेज दस्तावेज़ीकरण से पता चलता है कि आप:
- स्वत:प्रतिबद्धता अक्षम करें
COPY
का उपयोग करें आदेश- अनुक्रमणिका हटाएं
- विदेशी प्रमुख बाधाएं हटाएं
- आदि.
पोस्टग्रेज इंसर्ट को ऑप्टिमाइज़ करने के बारे में अधिक जानकारी के लिए, कृपया इस पर एक नज़र डालें:
- PostgresSql. संगठन:डेटा सम्मिलित करना
- PostgresSql.org :सम्मिलित करें + प्रदर्शन युक्तियाँ
- StackOverflow में सम्मिलन प्रदर्शन:PostgreSQL में सम्मिलन प्रदर्शन को कैसे तेज करें
इसके अलावा, कई अन्य कारक हैं जो सिस्टम के प्रदर्शन को प्रभावित कर सकते हैं। उच्च स्तरीय परिचय के लिए, इस पर एक नज़र डालें:
अन्य विकल्प
- क्या .NET कनेक्टर पोस्टग्रेज का समर्थन करता है
Copy
आदेश?- यदि नहीं, तो आप स्रोत कोड
डाउनलोड कर सकते हैं
Npgsql
. के लिए कनेक्ट करें और अपना खुद काBulkCopy()
add जोड़ें तरीका। पहले स्रोत कोड के लाइसेंसिंग अनुबंध की समीक्षा करना सुनिश्चित करें।
- यदि नहीं, तो आप स्रोत कोड
डाउनलोड कर सकते हैं
- यह देखने के लिए जांचें कि क्या पोस्टग्रेस तालिका मान पैरामीटर का समर्थन करता है .
- यह दृष्टिकोण आपको एक तालिका में
Postgres
. में पास करने की अनुमति देता है फ़ंक्शन जो तब डेटा को सीधे गंतव्य में सम्मिलित कर सकता है।
- यह दृष्टिकोण आपको एक तालिका में
- एक पोस्टग्रेजखरीदें एक विक्रेता से .NET कनेक्टर जिसमें आवश्यक सुविधा शामिल है।
अतिरिक्त संदर्भ
- Postgres .NET Connector - मुफ़्त &ओपन सोर्स