आपको जिस समस्या का सामना करना पड़ता है वह यह है कि आपने स्वयं को "नए कनेक्शन प्रति क्रिया" कोने में कोडित किया है। आप वास्तव में क्या लक्ष्य बनाना चाहते हैं, और इसे सर्वोत्तम अभ्यास माना जाता है, "कार्रवाई के प्रति बैच नया कनेक्शन" है।
इस मामले में मैं जो अनुशंसा करता हूं वह है कि आवश्यकता पड़ने पर कनेक्शन खोलना और निपटाए जाने पर बंद करना। हम क्या करेंगे कि odbc एडेप्टर को एक बड़े दायरे वाले वेरिएबल में ले जाया जाए ताकि इसे कक्षा के भीतर एक्सेस किया जा सके।
namespace databaseFunctions
{
public class databaseConnection:IDisposable
{
private OdbcConnection con;
private string connectionString;
public databaseConnection(string connectionString){
this.connectionString = connectionString;
}
public void OpenConnection(){
if (con == null || con.IsClosed ){ // we make sure we're only opening connection once.
con = new OdbcConnection(this.connectionString);
}
}
public void CloseConnection(){
if (con != null && con.IsOpen){ // I'm making stuff up here
con.Close();
}
}
public DataTable getFromDatabase(string SQL)
{
OpenConnection();
DataTable rt = new DataTable();
DataSet ds = new DataSet();
OdbcCommand cmd = new OdbcCommand(SQL, con);
da.SelectCommand = cmd;
da.Fill(ds);
try
{
rt = ds.Tables[0];
}
catch
{
rt = null;
}
return rt;
}
public Boolean insertIntoDatabase(string SQL)
{
OpenConnection();
OdbcCommand cmd = new OdbcCommand(SQL, con);
con.Open();
try
{
cmd.ExecuteNonQuery();
return true;
}
catch
{
return false;
}
}
// Implementing IDisposable method
public void Dispose(){
CloseConenction();
}
}
}
अब अगली बार जब आप अपनी कक्षा का उपयोग करें तो कुछ ऐसा करें
using (DatabaseConnection db = new DatabaseConnection()){
db.InsertIntoDatabase(...);
db.GetLastInsertID();
db.GetFromDatabase(...);
}
उस कोड ब्लॉक के अंत में, क्योंकि यह IDisposeable है, यह आपके लिए उस कनेक्शन को डिस्पोज़ विधि में बंद कर देगा।
चीजें जो मैंने बदली हैं:
- कार्यान्वित IDisposable इंटरफ़ेस
- स्टेटिक से क्लास मेथड्स में बदला।
- बंद कनेक्शन खोलने के लिए नए तरीके जोड़े
- कनेक्शन वैरिएबल को क्लास लेवल स्कोप में ले जाया गया
- कन्स्ट्रक्टर के लिए एक तर्क जोड़ा जो आपको एक कनेक्शन स्ट्रिंग में पास करने देता है (आपको इस कनेक्शन स्ट्रिंग को आप में रखना चाहिए Web.Config
संपादन:
- कन्स्ट्रक्टर प्रति सुझाव कनेक्शन में लेता है।