- - PR -
OracleCommandBuilderを使ってViewを更新
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-03-01 09:50
CommandBuilder.GetUpdateCommand().ComanndText
Insert,deleteも同じようにあります。 コマンドの自動生成が完全な悪者だとは言い切れません。 ケースによって使い分けが必要なことがあるので自分でSQLやDBの知識をもって CommandBuilderの仕様と照らし合わせた上で使用するという認識をもつようにする ということです。 CommandBuilderは、ODP.NETのものを使用されているようですが、 ADO.NETのSqlCommandBuilderとほぼ仕様は同じです。↓ http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemDataSqlClientSqlCommandBuilderClassTopic.asp もう参考にされてるかもしれませんが、こんなトピックとかもあります。↓ http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18868&forum=7&3 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18290&forum=7&start=16&20 | ||||||||
|
投稿日時: 2005-03-01 12:10
いやぁ、私はかなり恥ずかしい勘違い発言をしただけで 軽率な発言は控えようと激しく反省中です。
http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/index.html ↑の第5回がかなり参考になります。お薦めです。 | ||||||||
|
投稿日時: 2005-03-01 17:23
xxななおxxさん、ぼのぼのさんご返答ありがとうございます。
参照リンクまで教えてくださり本当にありがとうございました。 UpdateCommandの中身を見る方法がわかりました。 Dim OraDA As OracleAdaoter Dim OCB As New OracleCommandBuilder(OraDA) Dim OraUp As OracleCommand OraUp = OCB.GetUpdateCommand 上記のコードでOraUpのCommandTextプロパティで確認することができました。 ただ、Viewに対しての更新箇所ではOraUpのところで同じエラーになってしまいました。 今回質問したところはコマンドビルダーを使用するのをやめたのですが、他のところでコマンドビルダーを引き続き使用しようとしています。 中身をよく確認し、使用していきたいと思います。 ありがとうございました。 | ||||||||
|
投稿日時: 2005-03-01 20:41
まず、仕様に関する問題から。 対象のデータを、2人の人が同時に見ています。二人とも情報を書き換え、データベースへ書き出しました。さて、次に検索したとき、どちらの情報が取り出されるでしょうか? 通常、後から実行した方が有効になります。でも、それでいいですか?二人が書き換えた情報が、同じカラムのデータならそれでもいいかもしれません。でも、違うカラムのデータを書き換えたらな、それはまずいですよね。その為、コマンド自動生成では、すべてのカラムが変更前と一致しているかどうかの確認をします。 UPDATE table SET column1 = data1 WHERE ID=id AND COLUMN2 = column2OldData AND ... このため、インデックスが張られていない検索が発生し、パフォーマンスが落ちます。 これらを避けるため、私はLastModifyという列を用意し、INSERT、UPDATEのトリガーでシステム日時を放り込むようにしています。こうするとLastModifyの列が一致しているか検査するだけで、他の人が書き換えていないかチェックできます。 実際に誰かが書き換えた後にUPDATEなどをしようとすると、IDbCommand.ExecuteNonQueryメソッドを使う場合は戻り値が0になり、判定できます。DbDataAdapter.Updateメソッドを使った場合は、System.Data.DBConcurrencyExceptionが発生します。 _________________ | ||||||||
