Как и многие люди, у меня есть свои собственные компоненты доступа к стандартным данным, которые включают в себя методы возвращают DataSet. Конечно, если исключение ConstraintException выбрано, DataSet не возвращается вызывающему, поэтому вызывающий не может проверить наличие ошибок строки.
Что я сделал это поймать и Rethrow ConstraintException в таких методах регистрации сведения об ошибках строки, как показано в следующем примере (который использует Log4Net для регистрации):
...
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());
}
Я дам вам больше вверх голосов, если бы мог. Это тоже шип в моей стороне. – 2008-09-26 15:19:56