2009-02-04 16 views
8

मैं एक डीएएल पर काम कर रहा हूं जो डेटारिएडर को असीमित रूप से प्राप्त कर रहा है।SQLDataReader से डेटासेट को पॉप्युलेट करने के लिए सर्वोत्तम विधि

मैं डेटा रीडर को डेटासेट में बदलने के लिए एक विधि लिखना चाहता हूं। इसे विभिन्न स्कीमा को संभालने की ज़रूरत है ताकि यह एक विधि मेरी सभी fetch आवश्यकताओं को संभालेगी।

पीएस मैं SQLDataReader को असीमित रूप से पॉप्युलेट कर रहा हूं, कृपया उन उत्तरों को न दें जो DataReader से छुटकारा पा रहे हैं।

+0

था DataSet.Load (:

 DataTable dt = new DataTable(); dt = sdr.GetSchemaTable(); //dt.Constraints.Clear(); //dt.PrimaryKey = null; //dt.BeginLoadData(); if (sdr.HasRows) { DataRow row; while (sdr.Read()) { row = dt.NewRow(); sdr.GetValues(row.ItemArray); dt.Rows.Add(row); } 

एक और तरीका है SqlTableAdapter उपयोग करने के लिए है) अच्छा नहीं? http://msdn.microsoft.com/en-us/library/5fd1ahe2.aspx –

+0

वास्तव में मुझे इस विकल्प से अवगत नहीं था। यह देखने के लिए इंतजार नहीं कर सकता कि नेट फ्रेमवर्क संस्करण 5 आदि में कितना जटिल होगा –

+0

या तो मैं था, मैट के लिए धन्यवाद! – Phaedrus

उत्तर

9

DataSet.Load() आज़माएं। इसमें आईडीटाइडर लेने वाले कई ओवरलोड हैं।

+0

डेटाटेबल (जिसमें एक ही विधि है) का उपयोग करके समाप्त होता है –

+2

इसे स्ट्रिंग [] या डेटाटेबल [] को तीसरे पैरामीटर के रूप में आवश्यक है। शुरुआती खाली डेटासेट को किसी भी टेबल के साथ पहले से स्कीमा जानने के बिना पॉप्युलेट करने का कोई तरीका है? ऐसा लगता है कि यह समाधान आंशिक रूप से अवरुद्ध कर रहा है क्योंकि DataSet.Load() SqlDataReader – KolA

14

DataTable.load() सामान्य दृष्टिकोण के लिए उपयोग किया जा सकता है।

do { 
    var table = new DataTable(); 
    table.Load(reader); 
    dataset.Tables.Add(table); 
} while(!reader.IsClosed); 
+0

के ReadAsync() और NextResultAsync() विधियों का लाभ नहीं उठाएगा, यह पूछे गए प्रश्न का उत्तर है। धन्यवाद। – mcNux

0

किसी कारण लोड पद्धति विफल के लिए, यहाँ यह करने के लिए एक मैनुअल तरीका है:

var adapter = new SqlDataAdapter(command); 
DataSet ds = new DataSet(); 
adapter.Fill(ds); 
संबंधित मुद्दे