我使用数据表在数据库中插入记录,利用企业库的数据块。
正如您将在下面的代码中看到的,我在数据集上发出UpdateDataSet,然后在DataTable中查找错误,从中提取有问题的数据行。我必须生成一份关于这些错误记录的报告。
为了进行测试,我添加了一行符合数据库并插入的行,添加了另一行违反FK约束的行。
DbCommand command = _database.GetStoredProcCommand("SP_Simple_Insert");
_database.AddInParameter(command, "JobID", DbType.Int32, "JobID", DataRowVersion.Current);
...
...
...
int rowsaffected = _database.UpdateDataSet(dataSet, tableName, command, null, null, UpdateBehavior.Continue, batchSize); // batchsize is 1000
LogMessage("SaveBatch", string.Format("BatchCount: {0}, AffectedRows: {1}", dataSet.Tables[0].Rows.Count, rowsaffected), Level.Info);
if (dataSet.Tables[tableName].HasErrors)
{
DataRow[] rows = dataSet.Tables[tableName].GetErrors();
LogMessage("SaveBatch", string.Format("Errors: {0}", rows.Length), Level.Debug);
}
当我查看从GetErrors方法返回的Datarow时,它实际上是插入数据库的那个。
当我在数据集中只有错误的行时,它会在错误中返回正确的行。
我不确定这是否是因为企业库或其他原因。有一件事是肯定的,这不是应该如何。