2012-03-08 19 views
22

मेरे पास डेटा के कई पंक्तियों के साथ "परिणाम" नामक एक डेटासेट है। मैं इस डेटा को एक स्ट्रिंग में प्राप्त करना चाहता हूं, लेकिन मैं यह नहीं समझ सकता कि इसे कैसे किया जाए। मैं नीचे दिए गए कोड का उपयोग कर रहा हूं:एक स्ट्रिंग में datarow मूल्य प्राप्त करना?

string output = ""; 
foreach (DataRow rows in results.Tables[0].Rows)  
{ 
    output = output + rows.ToString() + "\n"; 
} 

हालांकि, मुझे लगता है कि मुझे कुछ याद आ रहा है क्योंकि यह काम नहीं कर रहा है। क्या कोई मुझे सही दिशा दिखा सकता है?

+0

क्या काम नहीं कर रहा है? क्या आपको कहीं अपवाद मिल रहा है? –

+0

कोई अपवाद नहीं। यह सिर्फ इतना है कि "आउटपुट" का मूल्य वह नहीं है जो मैं उम्मीद कर रहा था। लेकिन, मुझे लगता है कि नीचे दिए गए दो उत्तरों ने मुझे सही समाधान की ओर अग्रसर किया है। – Kevin

उत्तर

37

आपको उस डेटा को निर्दिष्ट करने की आवश्यकता है जिसे आप डेटा खींचना चाहते हैं।

 StringBuilder output = new StringBuilder(); 
     foreach (DataRow rows in results.Tables[0].Rows) 
     { 
      foreach (DataColumn col in results.Tables[0].Columns) 
      { 
       output.AppendFormat("{0} ", rows[col]); 
      } 

      output.AppendLine(); 
     } 
+0

जेफ, यह पूरी तरह से काम किया! आपको बहुत - बहुत धन्यवाद! मैंने स्ट्रिंगबिल्डर का बहुत कुछ उपयोग नहीं किया है, इसलिए मुझे यहां उपयोग करने का मौका मिला है। उदाहरण कोड के लिए भी धन्यवाद! – Kevin

+0

आपका बहुत स्वागत है, स्ट्रिंगबिल्डर अद्भुत है। जब भी आप स्वयं को एक स्ट्रिंग में कई बार जोड़ते हैं, इसका उपयोग करने के लिए इसका उपयोग करें। – Khan

3

आपकी rows ऑब्जेक्ट में Item विशेषता है जहां आप अपने प्रत्येक कॉलम के लिए मान पा सकते हैं। जब आप पंक्ति पर .ToString() करते हैं तो आप स्तंभों को स्वयं को संयोजित करने की अपेक्षा नहीं कर सकते हैं। आपको पंक्ति से प्रत्येक कॉलम को अलग से एक्सेस करना चाहिए, कॉलम की सरणी चलने के लिए for या foreach का उपयोग करना चाहिए।

rows["ColumnName"] 

करके

http://msdn.microsoft.com/en-us/library/system.data.datarow.aspx

+0

आप सही हैं, आंद्रेई। मैं भूल गया था कि मुझे पंक्तियों में कॉलम पर भी पुनरावृत्ति करना होगा। – Kevin

4

आप एक कॉलम मूल्य प्राप्त कर सकते हैं आप approperiate प्रकार के कास्ट करने के लिए करना होगा:

यहाँ, वर्ग पर एक नज़र ।

output += (string)rows["ColumnName"] 
+0

धन्यवाद, मैथ्यू। प्रत्येक पंक्ति के लिए कॉलम से मेरे मूल्य प्राप्त करने की आवश्यकता के बारे में आप और आंद्रेई दोनों सही थे। मैं इसके बारे में पूरी तरह से भूल गया था। – Kevin

20

मैं इस एक बहुत अपने आप किया है:

का अनुसरण करें। तुम सिर्फ पंक्ति मूल्यों के सभी के लिए एक अल्पविराम से अलग सूची की जरूरत है आप यह कर सकते हैं:

StringBuilder sb = new StringBuilder(); 
foreach (DataRow row in results.Tables[0].Rows)  
{ 
    sb.AppendLine(string.Join(",", row.ItemArray)); 
} 

एक stringbuilder पसंदीदा तरीका है के रूप में स्ट्रिंग संयोजन डेटा की बड़ी मात्रा के लिए काफी धीमी है।