Cách DRYest để thực hiện việc này là viết phương thức trợ giúp lấy đại biểu, văn bản lệnh sql và tùy chọn mảng tham số sql nếu bạn đang sử dụng truy vấn tham số. Quấn các đại biểu trong một khối catch và gọi phương thức LogError khi có một ngoại lệ:
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;
}
}
Trong mã SQL của tôi, tôi gọi ExecuteAndLogError từ các phương thức helper lớp dữ liệu. Tất cả các phương thức lớp dữ liệu gọi ExecuteAndLogError, vì vậy chỉ có một phần mã để ghi lại các lỗi SQL.
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;
}
Bạn có thể sử dụng nó như thế này: repo.ExecuteDataTable("SELECT * FROM Users");
Nếu có một ngoại lệ, bạn có thể thực hiện phương pháp LogError để thực hiện thêm khai thác gỗ.
Một số mã này được lấy từ các lớp lớp dữ liệu Blog Subtext.
Nguồn
2011-09-19 21:22:47