我有一個傳遞一個康涅狄格州串和一個SqlCommand到數據層,像這樣可以通過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);
}
數據層則只是執行像這樣
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;
}
的SQL是它確定爲我業務層像這樣傳遞SQLCommand作爲參數,還是有更好的方法來實現它。 我所關注的一個是,如果執行查詢cmd.dispose行不執行時發生錯誤。這是否意味着它將繼續使用永遠不會被釋放的內存?
更新:
繼Eric的意見,我更明確地劃分了業務和數據層,以便在業務層的方法看起來像這樣
public void PopulateLocalData()
{
DataLayer Data = new DataLayer(this.ConnString);
Data.UpdateLocalData();
}
和方法,被稱爲在數據層看起來是這樣的。
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都會被正確處置。謝謝。
。沒有使用(SqlCommand ...),但是...問題是如果某些事情失敗,命令可能無法正確處置。連接很好。 – cHao 2010-04-23 14:02:00
據我所知,使用(SqlCommand cmd = ...)是完全有效的。 – 2010-04-23 14:08:42