Die DRYest-Methode besteht darin, eine Hilfsmethode zu schreiben, die einen Delegaten, den SQL-Befehlstext und optional ein SQL-Parameterarray verwendet, wenn Sie parametrisierte Abfragen verwenden. Wickeln Sie die Delegierten in einem Try-Catch-Block und rufen Sie die LogError Methode, wenn es eine Ausnahme:
protected virtual TResult ExecuteAndLogError<TResult>(Func<TResult> code, string sql, SqlParameterCollection parameters = null)
{
try {
if ((System.Diagnostics.Debugger.IsAttached))
PrintSqlToDebug(sql, parameters);
return code();
} catch (Exception ex) {
LogError(sql, parameters, ex);
throw;
}
}
In meinem SQL-Code I ExecuteAndLogError von Datenschicht Helfer Methoden aufrufen. Alle Datenschichtmethoden rufen ExecuteAndLogError auf, daher gibt es nur einen Codeabschnitt, um SQL-Fehler zu protokollieren.
public virtual DataTable ExecuteDataTable(SqlCommand command, params SqlParameter[] parameters)
{
command.Parameters.AddRange(parameters);
DataTable table = new DataTable();
using (SqlDataAdapter adapter = new SqlDataAdapter(command)) {
using (command) {
ExecuteAndLogError(() => adapter.Fill(table), command.CommandText, command.Parameters);
}
}
return table;
}
Sie können es wie folgt verwenden: repo.ExecuteDataTable("SELECT * FROM Users");
Wenn es eine Ausnahme ist, dass Sie die LogError Methode implementieren können zusätzliche Protokollierung durchzuführen.
Ein Teil dieses Codes wurde aus den Datenschichtklassen des Subtex-Blogs übernommen.