Giống như nhiều người, tôi có thành phần truy cập dữ liệu tiêu chuẩn của riêng tôi, trong đó bao gồm phương pháp để trả về một DataSet. Tất nhiên, nếu một ConstraintException được ném, DataSet không được trả lại cho người gọi, vì vậy người gọi không thể kiểm tra lỗi hàng.
Những gì tôi đã làm là nắm bắt và rethrow ConstraintException trong các phương pháp như vậy, đăng nhập chi tiết lỗi liên tiếp, như trong ví dụ sau đây (trong đó sử dụng Log4Net cho khai thác gỗ):
...
try
{
adapter.Fill(dataTable); // or dataSet
}
catch (ConstraintException)
{
LogErrors(dataTable);
throw;
}
...
private static void LogErrors(DataSet dataSet)
{
foreach (DataTable dataTable in dataSet.Tables)
{
LogErrors(dataTable);
}
}
private static void LogErrors(DataTable dataTable)
{
if (!dataTable.HasErrors) return;
StringBuilder sb = new StringBuilder();
sb.AppendFormat(
CultureInfo.CurrentCulture,
"ConstraintException while filling {0}",
dataTable.TableName);
DataRow[] errorRows = dataTable.GetErrors();
for (int i = 0; (i < MAX_ERRORS_TO_LOG) && (i < errorRows.Length); i++)
{
sb.AppendLine();
sb.Append(errorRows[i].RowError);
}
_logger.Error(sb.ToString());
}
tôi muốn cung cấp cho bạn nhiều up-phiếu nếu tôi có thể. Đây là một cái gai ở bên cạnh tôi. –