|
分類:[C#]
今マスタ関連の画面を作っています。 基本は1テーブルで1画面の構造とし、データ更新等に関するクラスを作成し、 そこでデータベース操作の一元処理をしようと思っております。
データ抽出とデータ挿入に関しては特に問題はないのですが、データ更新とデータ削除で つまずいていますので力を貸して下さい。
OracleDataAdapter.UpdateでフォームとバインドしたDataTableを渡しています。 共通クラスなので、クエリはできればそれぞれのマスタで明示的にコーディングするのでは なく動的に作りたいと思っております。
OracleDataAdapterのUpdateCommandとDeleteCommandには それぞれOracleCommandBuilderのGetUpdateCommand()とGetDeleteCommand()メソッドを 使って設定しています。
そこで、OracleDataAdapterのUpdateした際ににUpdate文とDelete文のWhere句をテーブルの プライマリキーだけにしたいです。
なぜならばupdateメソッド前にDataTableに対して直接値の変更(更新日付等)を行った 場合に更新対象がないとエラーがでます。 その様なDataTableに直接値の変更を行わないならちゃんと更新してくれるみたいなのですが。。
色々調べたら、OracleCommandBuilder.ConflictOption = ConflictOption.OverwriteChanges としたら出来そうなのは分かったのですが、odp.netのほうではまだサポートされてないんですかね・・? System.Data.OracleClientでは私の思ってた通りのSql文を発行してくれたのですが。。
もし、UpdateCommandを自前で書く必要があるのならば、DataTableのスキーマーから 判断してUpdate文とDelete文を作成する方法ってどのような考え方がありますか?
|