Enterprise Library のデータ ブロックを利用して、データベースにレコードを挿入するためにデータ テーブルを使用しています。
以下のコードでわかるように、データセットで UpdateDataSet を発行し、DataTable でエラーを探して、問題のあるデータ行を抽出します。これらの誤った記録に関するレポートを生成する必要があります。
テストのために、データベースに準拠して挿入される行を 1 つ追加し、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 を見ると、実際にはデータベースに挿入されたものです。
データセットにエラーのある行だけがある場合、エラーに正しい行が返されます。
これが Enterprise ライブラリによるものなのか、それとも何か他のものによるものなのかはわかりません。1 つ確かなことは、これが本来あるべき姿ではないということです。