我正在使用数据表在数据库中插入记录,利用企业库的数据块。
正如您将在下面的代码中看到的,我在数据集上发出 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 时,它实际上是插入到数据库中的那个。
当我在数据集中只有错误的行时,它会在错误中返回正确的行。
我不确定这是因为企业库还是其他原因。有一件事是肯定的,这不是它应该的样子。