आप उनमें से प्रत्येक के लिए एक ही कनेक्शन का उपयोग कर सकते हैं, जब तक कि आप अलग-अलग धागे से समान कनेक्शन पर एक साथ कई प्रश्न निष्पादित करने का प्रयास नहीं करते हैं।
डेटा रीडर के लिए, आप वास्तव में पाठक का पुन: उपयोग नहीं कर रहे हैं, ExecuteReader
पर प्रत्येक कॉल एक नए पाठक का एक नया उदाहरण देता है, जो आप फिर से उपयोग कर रहे हैं वह चर है जो पाठक के संदर्भ को बनाए रखता है। यहां एक समस्या निहित है, आप केवल अंतिम पाठक को स्पष्ट रूप से बंद कर रहे हैं और बाद में कुछ समय बाद जीसीएड को छोड़कर छोड़ रहे हैं।
आप कमांड का भी पुन: उपयोग कर सकते हैं, लेकिन याद रखें कि क्या आप पैरामीटर आदि प्रदान करते हैं। आपको अगली क्वेरी के लिए उन्हें तब तक साफ़ करने की आवश्यकता होगी जब तक कि वे अगली क्वेरी पर भी लागू न हों।
आप try/finally
ब्लॉक का उपयोग सुनिश्चित करें कि आप यहां संसाधनों को साफ, या चाहिए, भले ही वहाँ एक अपवाद है कि कोड के बाकी को रोकता है संसाधन सुनिश्चित करने के लिए सफाई using
बयानों का उपयोग करने के लिए अपने कोड के लिए एक त्वरित परिवर्तन है निष्पादन से।
using (var myConnection = GetTheConnection())
{
myConnection.Open();
var myCommand = new MySqlCommand("SELECT * FROM table1", myConnection))
using (var myDataReader = myCommand.ExecuteReader())
{
while(myReader.Read())
{
//Perform work.
}
} // Reader will be Disposed/Closed here
myCommand.commandText = "SELECT * FROM table2";
using (var myReader = myCommand.ExecuteReader())
{
while(myReader.Read())
{
//Perform more work
}
} // Reader will be Disposed/Closed here
} // Connection will be Disposed/Closed here
नोट: GetTheConnection
जो भी तंत्र आप अपने कनेक्शन उदाहरण प्राप्त करने के लिए प्रयोग कर रहे हैं के लिए सिर्फ एक स्थान धारक कार्य है।
स्रोत
2012-04-13 19:22:26
आपको एंटिटी फ्रेमवर्क का उपयोग करना चाहिए। –
शायद सहायक: http://stackoverflow.com/questions/9705637/executereader-requires-an-open-and-available-connection-the-connections-curren/9707060#9707060 –
क्या आपका उपरोक्त कोड कोई त्रुटि देता है? यदि नहीं, तो यह निश्चित रूप से ठीक है। – sarwar026