मैं ऐसे पैटर्न का उपयोग करता हूं जो इस तरह कुछ दिखता है। मैं सोच रहा हूं कि यह ठीक है या यदि कोई सर्वोत्तम अभ्यास है कि मैं यहां आवेदन नहीं कर रहा हूं।अपवाद फेंकने पर SQL कनेक्शन बंद होने का यह सुनिश्चित करने का उचित तरीका क्या है?
विशेष रूप से मैं सोच रहा हूं; इस मामले में कि एक अपवाद फेंक दिया गया है वह कोड है जो आखिरकार ब्लॉक में पर्याप्त है, यह सुनिश्चित करने के लिए कि कनेक्शन उचित रूप से बंद है?
public class SomeDataClass : IDisposable
{
private SqlConnection _conn;
//constructors and methods
private DoSomethingWithTheSqlConnection()
{
//some code excluded for brevity
try
{
using (SqlCommand cmd = new SqlCommand(SqlQuery.CountSomething, _SqlConnection))
{
_SqlConnection.Open();
countOfSomething = Convert.ToInt32(cmd.ExecuteScalar());
}
}
finally
{
//is this the best way?
if (_SqlConnection.State == ConnectionState.Closed)
_SqlConnection.Close();
}
//some code excluded for brevity
}
public Dispose()
{
_conn.Dispose();
}
}
उह ... तुम क्यों की जाँच कर रहे है कि कनेक्शन पहले से ही बंद करने से पहले बंद कर दिया है? और कनेक्शन को स्टोर करने के लिए क्लास सदस्य का उपयोग क्यों करें, यदि आप इसका उपयोग कर एकमात्र विधि में बंद कर रहे हैं? – Shog9
spoon16 वाक्यांश "// कुछ कोड संक्षिप्तता के लिए बाहर रखा गया" वाक्यांश शामिल था। इससे, मैं अनुमान लगाता हूं कि इसका उपयोग करने का यह एकमात्र तरीका नहीं है। –
सही, यह बिल्कुल सरल उदाहरण है जिसे मैं सोच सकता हूं। मुझे लगता है कि कनेक्शन पूलिंग के कारण मुझे प्रत्येक विधि के दायरे के बाहर एक एसक्यूएलकनेक्शन ऑब्जेक्ट को स्टोर करने की आवश्यकता नहीं है। तो बस अन्य अनुशंसित के रूप में उपयोग करने के लिए उपयोग करने जा रहा है। –