private int UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, int commandCount)
{
Debug.Assert(null != batchCommands, "null batchCommands?");
Exception errors = rowUpdatedEvent.Errors;
if (null == errors)
{
// user changed status to ErrorsOccured without supplying an exception message
errors = ADP.RowUpdatedErrors();
rowUpdatedEvent.Errors = errors;
}
int affected = 0;
bool done = false;
string message = errors.Message;
for (int i = 0; i < commandCount; i++)
{
DataRow row = batchCommands[i]._row;
Debug.Assert(null != row, "null dataRow?");
if (null != batchCommands[i]._errors)
{ // will exist if 0 == RecordsAffected
string rowMsg = batchCommands[i]._errors.Message;
if (string.IsNullOrEmpty(rowMsg))
{
rowMsg = message;
}
row.RowError += rowMsg;
done = true;
}
}
if (!done)
{ // all rows are in 'error'
for (int i = 0; i < commandCount; i++)
{
DataRow row = batchCommands[i]._row;
// its possible a DBConcurrencyException exists and all rows have records affected
// via not overriding GetBatchedRecordsAffected or user setting the exception
row.RowError += message;
}
}
else
{
affected = UpdatedRowStatusContinue(rowUpdatedEvent, batchCommands, commandCount);
}
if (!ContinueUpdateOnError)
{
throw errors; // out of Update
}
return affected; // return the count of successful rows within the batch failure
}