Ich habe einen Business Layer, die einen Conn-String und einen SQLCommand zu einer Data Layer geht wie soIst es OK, SQLCommand als Parameter zu übergeben?
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);
}
data führt dann nur die SQL-wie so
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;
}
Ist es für mich in Ordnung zu Übergeben Sie den SQLCommand als einen Parameter wie diesen, oder gibt es einen besser akzeptierten Weg, dies zu tun. Eines meiner Bedenken ist, wenn beim Ausführen der Abfrage ein Fehler auftritt, wird die cmd.dispose-Zeile niemals ausgeführt. Bedeutet das, dass es weiterhin Speicher verbraucht, der niemals veröffentlicht wird?
Update:
Erics Beratung Nach mehr ich explizit die Geschäfts- und Datenebenen unterteilt, so dass die Methode in der Business-Schicht wie diese
public void PopulateLocalData()
{
DataLayer Data = new DataLayer(this.ConnString);
Data.UpdateLocalData();
}
und Methode sucht, die in der Datalayer genannt wird, sieht wie folgt aus .
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();
}
}
Auf diese Weise ist es sehr klar ist, dass sowohl der SQLCommand und die SQLConnection werden fachgerecht entsorgt werden. Vielen Dank.
. Es gibt jedoch keine Verwendung (SqlCommand ...), und das Problem ist, dass der Befehl nicht ordnungsgemäß entsorgt werden kann, wenn etwas fehlschlägt. Die Verbindung ist in Ordnung. – cHao
Soweit ich weiß, ist die Verwendung von (SqlCommand cmd = ...) vollkommen gültig. –