मैं एक व्यापार परत है कि एक कॉन स्ट्रिंग और इतनेक्या SQLCommand को पैरामीटर के रूप में पास करना ठीक है?
public void PopulateLocalData()
{
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "usp_PopulateServiceSurveyLocal";
DataLayer.DataProvider.ExecSQL(ConnString, cmd);
}
की तरह एक डेटा स्तर पर एक SqlCommand गुजरता dataLayer तो बस इतना
public static int ExecSQL(string sqlConnString, System.Data.SqlClient.SqlCommand cmd)
{
int rowsAffected;
using (SqlConnection conn = new SqlConnection(sqlConnString))
{
conn.Open();
cmd.Connection = conn;
rowsAffected = cmd.ExecuteNonQuery();
cmd.Dispose();
}
return rowsAffected;
}
तरह एसक्यूएल कार्यान्वित करने के लिए मेरे लिए यह ठीक है है SQLCommand को इस तरह के पैरामीटर के रूप में पास करें या ऐसा करने का एक बेहतर स्वीकार्य तरीका है। मेरी चिंताओं में से एक यह है कि क्वेरी को निष्पादित करते समय त्रुटि उत्पन्न होती है cmd.dispose लाइन कभी निष्पादित नहीं होगी। क्या इसका मतलब यह है कि यह स्मृति का उपयोग जारी रखेगा जो कभी जारी नहीं किया जाएगा?
अद्यतन:
एरिक की सलाह के बाद मैं और अधिक स्पष्ट रूप से व्यापार और डेटा परतों विभाजित तो व्यापार परत में विधि इस
public void PopulateLocalData()
{
DataLayer Data = new DataLayer(this.ConnString);
Data.UpdateLocalData();
}
और विधि है कि dataLayer में कहा जाता है की तरह लग रहा इस तरह दिखता है ।
public void UpdateLocalData()
{
using (SqlConnection conn = new SqlConnection(this.ConnString))
using(SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "usp_PopulateServiceSurveyLocal";
conn.Open();
cmd.Connection = conn;
cmd.ExecuteNonQuery();
}
}
इस तरह यह बहुत स्पष्ट है कि SQLCommand और SQLConnection दोनों को ठीक से निपटान किया जाएगा। धन्यवाद।
public static int ExecSQL(string sqlConnString, System.Data.SqlClient.SqlCommand cmd)
{
int rowsAffected;
try
{
using (SqlConnection conn = new SqlConnection(sqlConnString))
{
conn.Open();
cmd.Connection = conn;
rowsAffected = cmd.ExecuteNonQuery();
}
} finally {
cmd.Dispose();
}
return rowsAffected;
}
साथ ही, मैं आम तौर पर अपने व्यवसाय और डेटा परतों से अधिक तुम क्या अलग:
: सामान्य नियम अब भी है - लेकिन यह एक कार्यान्वयन विस्तार है कि आप पर भरोसा नहीं करना चाहिए। हालांकि कोई उपयोग नहीं कर रहा है (SqlCommand ...) ... और समस्या यह है कि अगर कुछ विफल रहता है तो आदेश ठीक से निपटान नहीं किया जा सकता है। कनेक्शन ठीक है। – cHao
जहां तक मुझे पता है, (SqlCommand cmd = ...) का उपयोग पूरी तरह से मान्य है। –