2012-02-23 12 views
6

में कनवर्ट करने के लिए कैसे करें datareader को datatable में कनवर्ट करने के बारे में मेरा कोई प्रश्न है। मेरे कोड में, मेरे पास एक वर्ग में बनाया गया datareader है और एक और कक्षा में पारित किया गया है जिसे मैं इसे datatable में परिवर्तित करना चाहता हूं।डेटाटेडर को डेटाटेबल

जब मैं ऐसा करता हूं, यह काम नहीं करता है, क्योंकि तालिका खाली बनी हुई है। अगर मैं एक ही समारोह में रूपांतरण करता हूं, तो यह ठीक काम करता है।

यह केवल तभी होता है जब मैं datareader को किसी अन्य फ़ंक्शन पर पास करता हूं कि काम करना बंद कर देता है। क्या ऐसा इसलिए है क्योंकि dr बंद है या कुछ? मैं इस समस्या को कैसे दूर करूं? कोई भी मदद बहुत अच्छी रहेगी।

+0

आपको कभी भी 'डेटा रीडर' पास नहीं करना चाहिए क्योंकि आप वस्तुओं को निपटाने के लिए पूरी तरह याद करेंगे या कई बार डेटा नहीं होगा। क्या आप उपयोग में आने वाली विधि को संपादित कर सकते हैं, 'DataReader' को वापस करने से पहले एक? तो उदाहरण के लिए आप उस विधि में 'डेटाटेबल' प्रॉपर्टी जोड़ सकते हैं और रिटर्न से पहले इसे पॉप्युलेट कर सकते हैं ताकि आप उस 'कक्षा' के बाहर पकड़ सकें ... – balexandre

+1

नहीं, मुझे निर्देश दिया गया था कि केवल एक डाटाएडर वापस लौटाया जाए। तर्क यह है कि डेटाटेडर को पार करने वाला फ़ंक्शन कहीं और – jason

उत्तर

2

इस की जाँच करें:

Public Function ExecuteQuery(ByVal s As String, ByVal condb As SqlConnection, ByVal ParamArray params() As SqlParameter) As DataTable 
     Dim dt As DataTable = Nothing 
     Using da As New System.Data.SqlClient.SqlDataAdapter(s, condb)    
      dt = New DataTable 
      If params.Length > 0 Then 
       da.SelectCommand.Parameters.AddRange(params) 
      End If 
      If da.SelectCommand.Connection.State <> ConnectionState.Open Then da.SelectCommand.Connection.Open() 
      da.Fill(dt)      
     End Using 
     Return dt 
End Function 
+0

+1 का उपयोग किया जा सकता है, प्रतिक्रिया के लिए एक अच्छा @HndlCode –

+0

धन्यवाद। क्या कनेक्शन या पैरामीटर जानने के बिना ऐसा करने के लिए वैसे भी है? एकमात्र चीज जिसे मैं पारित कर रहा हूं वह डेटरेडर है। धन्यवाद – jason

+0

परमएरे वैकल्पिक है इसलिए आपको किसी पैरामीटर को पास करने की आवश्यकता नहीं है :), कृपया मेरे anser को दाईं के रूप में चिह्नित करें – HndlCode

39

उपयोग DataTable Load() विधि।

// Given a DataReader called "reader" 
DataTable dt = new DataTable(); 
dt.Load(reader)