У меня есть бизнес-уровня, который проходит строку Конн и 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);
}
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 никогда не будет выполнена. Означает ли это, что он будет продолжать использовать память, которая никогда не будет выпущена?
Update:
Следуя совету Эрика я более четко разделил бизнес и данных слоев, поэтому метод в бизнес-слой выглядит следующим образом
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 будут утилизированы должным образом. Благодарю.
. Нельзя использовать (SqlCommand ...), хотя ... и проблема в том, что команда не может быть утилизирована должным образом, если что-то не удается. Соединение прекрасное. – cHao
Насколько я знаю, использование (SqlCommand cmd = ...) вполне допустимо. –