- - PR -
OracleCommandBuilderを使ってViewを更新
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-02-25 18:07
お世話になっております。
今回はOracleCommandBuilderを使ったViewの更新について質問があります。 現在、以下のような処理を行っています。 @テーブルからDatasetにデータを取得 ADatasetを更新 BCommandBuilderを使ってテーブルを更新 このとき、テーブルに対しては正常に処理が動くのですが、ビューに対してだとエラーが起きてしまいます。 エラーの内容は以下のようになっています。 Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information. エラーはOracleDataAdapter.Updateコマンドを実行した時に起こります。 Viewには更新できないのでしょうか? Viewを使って更新できるデータに制限をかけようとしているため、テーブルではなくViewを使う予定です。 おわかりになられる方がいらっしゃいましたらよろしくお願い致します。 (環境はVS.NET2003(SP2)、言語はVB.NETによるWindowsアプリケーションです。) | ||||
|
投稿日時: 2005-02-25 18:41
試していません。
OracleDataAdapter.UpdateCommandを手動で設定すれば更新できると思います。 エラーメッセージを読む限りは、Viewのときはキー情報が得られない(と思われる) ので、動的な生成は無理そうです。 | ||||
|
投稿日時: 2005-02-25 20:17
そういう問題じゃないと思いますが(^^;
ビューって、何だと思いますか? それが分かればエラーメッセージの意味も分かります。 | ||||
|
投稿日時: 2005-02-25 20:49
いや、view だからって更新が出来ないわけじゃないので…
| ||||
|
投稿日時: 2005-02-25 21:16
そうなんですか…知らなかった
偉そうなこと言っちゃってすみません。失礼致しました。m(_ _)m | ||||
|
投稿日時: 2005-02-25 22:14
↑”kanaiさん”と同意見ですが、 UpdateCommandの中身を確認し、それが意図したものになっていますか? SQLが実際どういうコマンドとして記述されるか?自分で記述できると思いますので、 それを比較しみてはどうですか? ちなみにコマンド自動生成というものを過信してDB操作を行うとはまる可能性があります。 (パフォーマンスにも影響する可能性があります。。) | ||||
|
投稿日時: 2005-02-28 10:22
データベースのViewの代わりに 「更新できる行に制限をかける」→DataViewで制限 「更新できる列に制限をかける」→DataSetで制限(DataGridでも可能かも) とする方法もあります。 こうすれば、元はテーブルのままでよいので、CommandBuilderによる自動生成も 問題なく利用できると思います。 | ||||
|
投稿日時: 2005-02-28 19:24
kanaiさん、ぼのぼのさん、にしざきさん、xxななおxxさんご返答ありがとうございます。
返信が遅くなってしまってすいませんでした。 UpdateCommandの中身を確認する方法が見つけられず、結局Updateコマンドを直書きすることで対処することにしました。 SQLPLUSでの処理は正常に実行されていたため、問題はないようです。 SQLPLUSで実行できるのにCommandBuilderを使用すると実行できないので疑問に思っていました。 コマンド自動生成はあまり使用しないほうがよいのでしょうか? パフォーマンスが落ちるのですか? そういった書き込みは今回のエラーが出た時に結構見かけたのですが、今からSQLの直書きに変更しようか悩んでいます。 VIEWを使用しないでDataView、DataSetの制限で管理する方法ですが、各パソコンごとに見れるデータに制限をかけようとしています。 そのため、見れるデータをログイン時のIDとPASSWORDで操作しようとViewを使用することになりました。 kanaiさんありがとうございました。 |