0

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 つ確かなことは、これが本来あるべき姿ではないということです。

4

0 に答える 0