【发布时间】:2010-04-23 13:49:38
【问题描述】:
我有一个业务层,可以像这样将 Conn 字符串和 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);
}
DataLayer 然后像这样执行 sql
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 行将永远不会执行。这是否意味着它将继续使用永远不会释放的内存?
更新:
按照 Eric 的建议,我更明确地划分了业务层和数据层,因此业务层中的方法如下所示
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 都将被正确处理。谢谢。
【问题讨论】: