का निपटान करने का सही तरीका है, मैं सोच रहा था कि मेरा नीचे कार्यान्वयन इस मामले में SQLconnection का निपटान करने का सबसे प्रभावी तरीका है या नहीं।क्या यह SQLConnection
मुझे सामान्य रूप से पता है कि अगर मैं सीधे एसक्यूएलकनेक्शन का उपयोग कर रहा हूं तो मैं इसे स्वचालित रूप से बंद करने के लिए एक ब्लॉक के अंदर कनेक्शन को लपेट सकता हूं, लेकिन इस मामले में मैं SQLRespository में सभी विधियों के लिए कनेक्शन खोलना और उपलब्ध रखना चाहता था कक्षा।
public class SqlRepository : IRepository
{
private readonly string connectionString;
private SqlConnection connection;
public SqlRepository(string connectionString)
{
this.connectionString = connectionString;
connection = new SqlConnection(connectionString);
connection.Open();
}
public void Method_A()
{
// uses the SqlConnection to fetch data
}
public void Method_B()
{
// uses the SqlConnection to fetch data
}
public void Dispose()
{
connection.Dispose();
}
}
उपयोग:
using (IRepository repository = new SqlRepository(connectionString))
{
var item = repository.items;
}
अद्यतन IRepository IDisposable
हालांकि इसकी लगभग हां, लेकिन ब्लॉक का उपयोग करने में कनेक्शन खोलने के बाद अपवाद के मामले में, यदि आप अधिक परिचालन करते हैं तो कुछ अपवाद फेंकने से आपकी कनेक्शन ऑब्जेक्ट कभी निपटान नहीं होगी। और कनेक्शन ऑब्जेक्ट्स को वैश्विक दायरा बनाने का अच्छा विचार नहीं है, इसके बजाए कमांडबैवियर के साथ खेलें यहां देखें: http://stackoverflow.com/questions/7903326/why-does-my-sccessccess-read-npgsql-data-disappear/7903616 # 7903616 – Zenwalker
एक और युक्ति है, हमेशा दिशानिर्देशों का पालन करें और निपटान पैटर्न लागू करें। और कनेक्शन। मान लें() आपके लिए कनेक्शन बंद कर देगा, आप इसकी आईएल देख सकते हैं और आप डीबीसी कनेक्शन देखेंगे। (कॉल) को कॉल किया जा रहा है। तो उपयोग() {} के तहत कॉन खोलना पर्याप्त है बशर्ते कोई अपवाद फेंक दिया न जाए। – Zenwalker
@zenwalker '... बशर्ते कोई अपवाद नहीं फेंक दिया गया है 'कथन का उपयोग कर' की मेरी समझ यह है कि इसे कंपाइलर द्वारा 'try' /' अंत में' में अनुवादित किया जाता है, इसलिए इसे हमेशा किसी मामले के मामले में भी निपटाया जाता है अपवाद। –