2009-10-27 19 views
20

डालने के लिए SqlDataAdapter का उपयोग करना मैं SqlDataAdapter का उपयोग कर डेटाबेस में एक पंक्ति डालना चाहता हूं। मेरे पास ग्राहक ऑर्डर डेटाबेस में 2 टेबल (कस्टॉर्मर्स & ऑर्डर) हैं और इसमें हजार से अधिक रिकॉर्ड हैं। मैं डेटाबेस में अपने संबंधित टेबल पर नए ग्राहक & ऑर्डर जोड़ने के लिए एक जीयूआई (टेक्स्टबॉक्स) बनाना चाहता हूं।एक पंक्ति

  • मुझे यह कैसे करना चाहिए?

मैं विधि कि आम तौर पर पीछा किया जाता है लगता है

dataAdapter = new SqlDataAdapter (sqlQuery, conn); 
dataSet = new DataSet(); 
da.Fill(dataSet); 

अब बक्सें से मान ले (या DataBinding का उपयोग करें) डाटासेट में एक नई पंक्ति जोड़ने के लिए और कॉल

da.Update(dataSet); 

लेकिन प्रश्न यह है कि मैं सभी अन्य रिकॉर्ड्स को डेटा में क्यों लेना चाहिए? दाल (डेटासेट) का उपयोग पहली जगह में करना? मैं सिर्फ एक नया रिकॉर्ड जोड़ना चाहता हूं।

इस उद्देश्य के लिए मैं डेटासेट में डेटाबेस की स्कीमा बनाना चाहता हूं। इस तरह:

DataSet customerOrders = new DataSet("CustomerOrders"); 

    DataTable customers = customerOrders.Tables.Add("Customers"); 
    DataTable orders = customerOrders.Tables.Add("Orders"); 

    customers.Columns.Add("CustomerID", Type.GetType("System.Int32")); 
    customers.Columns.Add("FirstName", Type.GetType("System.String")); 
    customers.Columns.Add("LastName", Type.GetType("System.String")); 
    customers.Columns.Add("Phone", Type.GetType("System.String")); 
    customers.Columns.Add("Email", Type.GetType("System.String")); 

    orders.Columns.Add("CustomerID", Type.GetType("System.Int32")); 
    orders.Columns.Add("OrderID", Type.GetType("System.Int32")); 
    orders.Columns.Add("OrderAmount", Type.GetType("System.Double")); 
    orders.Columns.Add("OrderDate", Type.GetType("System.DateTime")); 

    customerOrders.Relations.Add("Cust_Order_Rel", customerOrders.Tables["Customers"].Columns["CustomerID"], customerOrders.Tables["Orders"].Columns["CustomerID"]); 

मैंने इन कॉलम को संबंधित टेक्स्ट बॉक्स में बाध्य करने के लिए डेटा बाइंडिंग का उपयोग किया। अब मैं उलझन में हूँ! मुझे आगे क्या करना चाहिये? सम्मिलित करें आदेश का उपयोग कैसे करें? क्योंकि मैंने कोई डेटा नहीं दिया है एडाप्टर। चयन करें, इसलिए डेटा एडाप्टर। अद्यतन() काम नहीं करेगा मुझे लगता है। कृपया एक सही दृष्टिकोण का सुझाव दें।

उत्तर

32

"0 = 1" फ़िल्टर के साथ चयन कमांड सेट करें और SqlCommandBuilder का उपयोग करें ताकि आपके लिए सम्मिलित आदेश स्वचालित रूप से जेनरेट हो।

var sqlQuery = "select * from Customers where 0 = 1"; 
dataAdapter = new SqlDataAdapter(sqlQuery, conn); 
dataSet = new DataSet(); 
dataAdapter.Fill(dataSet); 

var newRow = dataSet.Tables["Customers"].NewRow(); 
newRow["CustomerID"] = 55; 
dataSet.Tables["Customers"].Rows.Add(newRow); 

new SqlCommandBuilder(dataAdapter); 
dataAdapter.Update(dataSet); 
+0

कि "जहां 0 = 1" एक lifesaver था। (मेमोरी में 2 जीबी की मीडिया टेबल लोड हो रहा है ... sigh ..) – pkExec

+4

मुझे 'नया एसक्यूएल कॉमांडबिल्डर (डेटा एडाप्टर) लाइन में दिलचस्पी थी;' - इससे कुछ जादू हो जाता है इसलिए मुझे पूरे इंसर्ट को स्क्रिप्ट नहीं करना पड़ेगा बयान। धन्यवाद! –

+0

डेटासेट। टेबल्स ["ग्राहक"]। जोड़ें (newRow); संकलित नहीं करता है। "System.Data.DataTable में 'एड' के लिए परिभाषा नहीं है"। क्या आपका मतलब डेटासेट है। टेबल [टेबल नाम]। पंक्तियां जोड़ें (नया पंक्ति) ;? –

7

आप एक खाली सेट उदा .:

da = new SqlDataAdapter ("SELECT * FROM Customers WHERE id = -1", conn); 
dataSet = new DataSet(); 
da.Fill(dataSet); 

तो आप अपनी पंक्तियों को जोड़ सकते हैं और अद्यतन फोन के साथ dataSet भर सकते हैं।

इस परिदृश्य के लिए हालांकि यह बेहतर होगा कि SqlDataAdapter का उपयोग न करें। इसके बजाय सम्मिलन के लिए सीधे SqlCommand ऑब्जेक्ट का उपयोग करें। (इससे भी बेहतर, LINQ से SQL या किसी अन्य ORM का उपयोग करें)

+0

मैंने इसके बारे में सोचा। लेकिन मेरे पास 200 से अधिक टेक्स्ट कॉलम का एक रूप है। तो, मैंने इसे चुना। – claws

+0

@Manu यह काम नहीं करेगा यदि आईडी नकारात्मक मानों का उपयोग करता है - आपको 1 पंक्ति वापस मिल सकती है। नाथन का जवाब 0 पंक्तियों का आश्वासन देता है। हालांकि यह अभी भी एक डीबी यात्रा बनाता है। – Ken

-3
SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=test;Integrated Security=True"); 
SqlDataAdapter da=new SqlDataAdapter("Insert Into Employee values("+textBox1.Text+",'"+textBox2.Text+"','"+textBox3.Text+"',"+textBox4.Text+")",con); 
DataSet ds = new DataSet(); 
da.Fill(ds); 

मैं पहली बार क्या करना है। आप इसे आज़मा सकते हैं । यह अच्छा काम करता है।

संबंधित मुद्दे