2011-12-03 14 views
29

मुझे पता है कि मैं while(dr.Read()){...} का उपयोग कर सकता हूं लेकिन यह मेरी तालिका पर हर फ़ील्ड को लूप करता है, मैं पहली पंक्ति से सभी मानों को पुनर्प्राप्त करना चाहता हूं, और फिर दूसरा ... और इसी तरह।मैं सी # में डेटा रीडर के साथ पंक्तियों के माध्यम से कैसे लूप करूं?

चलो कहते हैं कि मैं इस तरह एक मेज करते हैं:

ID--------------Value1--------------Value2------------------Value3 
1    hello    hello2     hello3 
2    hi1     hi2      hi3 

पहले मैं प्राप्त करना चाहते हैं, hello, hello2 और hello3 और उसके बाद दूसरी पंक्ति पर जाकर सभी मूल्यों को प्राप्त।

क्या यह हासिल करने का कोई तरीका है? मुझे आशा है कि कोई समझ जाएगा कि मेरा क्या मतलब है।

मुझे बहुत खेद है, यह अब हल हो गया है। मैं बस सही कोडिंग नहीं कर रहा था ...

और हाँ SqlDataReader.Read() विधि करता है जो इसे करना है, फिर गलती मेरी थी।

+0

मुझे समझ में नहीं आता कि आपका क्या मतलब है। एक डेटा रीडर पहले से ही पंक्तियों को एक पंक्ति में वापस लौटाता है, और आप किसी भी क्रम में प्रत्येक कॉलम तक पहुंच सकते हैं, संभवतः पहले से आखिरी तक यदि आप चाहते हैं। क्या आप कुछ ठोस कोड, अपेक्षित आउटपुट और आउटपुट को वास्तव में प्राप्त करने के लिए अपना प्रश्न अपडेट कर सकते हैं? – hvd

उत्तर

58

रास्ता DataReader काम करता है यही कारण है, यह डेटाबेस पंक्तियों एक समय में एक को पढ़ने के लिए बनाया गया है।

while(reader.Read()) 
{ 
    var value1 = reader.GetValue(0); // On first iteration will be hello 
    var value2 = reader.GetValue(1); // On first iteration will be hello2 
    var value3 = reader.GetValue(2); // On first iteration will be hello3 
} 
0

दरअसल Read परिणाम सेट में रिकॉर्ड पर पुनरावृत्ति विधि। आपके मामले में - टेबल पंक्तियों पर। तो आप अभी भी इसका इस्तेमाल कर सकते हैं।

24
int count = reader.FieldCount; 
while(reader.Read()) { 
    for(int i = 0 ; i < count ; i++) { 
     Console.WriteLine(reader.GetValue(i)); 
    } 
} 

नोट; यदि आप कई ग्रिड, तो है:

do { 
    int count = reader.FieldCount; 
    while(reader.Read()) { 
     for(int i = 0 ; i < count ; i++) { 
      Console.WriteLine(reader.GetValue(i)); 
     } 
    } 
} while (reader.NextResult()) 
+1

मैं समझता हूं कि रीडर के माध्यम से लूप कैसे करें और कंसोल के साथ सभी मान प्राप्त करें। राइटलाइन (रीडर.गेटवेल्यू (आई)); यह ठीक काम करता है, मुझे इसे एक सरणी में जोड़ने की ज़रूरत है कि मुझे Mystringarray [I] = reader.GetValue (I) कैसे प्राप्त करें, यह केवल सरणी के पहले एक अनुक्रमणिका 0 को जोड़ता है और इसे दूसरे में जोड़ना जारी नहीं रखता – shawn

+0

आप थोड़ी देर बाद अर्धविराम से चूक गए (reader.NextResult()) – yogihosting

3

मैं कैसे सी # में एक डेटा रीडर के साथ पंक्तियों के माध्यम से लूप करते हैं?

IDataReader. Read() पाठक को परिणाम में अगली पंक्ति में आगे बढ़ता है।

while(reader.Read()){ 
    /* do whatever you'd like to do for each row. */ 
} 

तो, अपने पाश में से प्रत्येक यात्रा के लिए, तो आप एक पाश, 0 reader. FieldCount लिए करते हैं, और प्रत्येक क्षेत्र के लिए reader. GetValue(i) फोन चाहते हैं।

बड़ा सवाल यह है कि आप उस डेटा को पकड़ने के लिए किस प्रकार की संरचना का उपयोग करना चाहते हैं?

5

एक ही बार में "पूरी पंक्ति" पाने के लिए कोई तरीका नहीं है - आप पंक्तियों के माध्यम से लूप करने की जरूरत है, और प्रत्येक पंक्ति के लिए, आप प्रत्येक स्तंभ अलग से पढ़ने की जरूरत है:

using(SqlDataReader rdr = cmd.ExecuteReader()) 
{ 
    while (rdr.Read()) 
    { 
     string value1 = rdr.GetString(0); 
     string value2 = rdr.GetString(1); 
     string value3 = rdr.GetString(2); 
    } 
} 

आप के साथ क्या क्या उन पंक्तियों को जिन्हें आप प्रत्येक पंक्ति के लिए पढ़ते हैं वह पूरी तरह से आपके ऊपर है - आप उन्हें एक कक्षा में संग्रहीत कर सकते हैं जिसे आपने परिभाषित किया है, या जो कुछ भी ....

17

या आप नाम से सीधे स्तंभ तक पहुँचने का प्रयास कर सकते हैं:

while(dr.Read()) 
{ 
    string col1 = (string)dr["Value1"]; 
    string col2 = (string)dr["Value2"]; 
    string col3 = (string)dr["Value3"]; 
} 
-1

मान लीजिए कि आपके DataTable निम्नलिखित कॉलम इस कोड की कोशिश है: एक colunmn में

DataTable dt =new DataTable(); 
txtTGrossWt.Text = dt.Compute("sum(fldGrossWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldGrossWeight)", "").ToString(); 
txtTOtherWt.Text = dt.Compute("sum(fldOtherWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldOtherWeight)", "").ToString(); 
txtTNetWt.Text = dt.Compute("sum(fldNetWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldNetWeight)", "").ToString(); 
txtFinalValue.Text = dt.Compute("sum(fldValue)", "").ToString() == "" ? "0" : dt.Compute("sum(fldValue)", "").ToString(); 
0
while (dr.Read()) 
{ 
    for (int i = 0; i < dr.FieldCount; i++) 
    { 
     subjob.Items.Add(dr[i]); 
    } 
} 

पंक्तियों को पढ़ने के लिए

+1

मुझे लगता है कि आपका मतलब subjob.Items.Add (dr [i]); – WiredEarp

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

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