- PR -

GetUpdateCommandでエラー

1
投稿者投稿内容
mino
会議室デビュー日: 2003/08/25
投稿数: 2
投稿日時: 2005-02-11 15:43
はじめまして。

テーブルに対してCommandBuilderを使って更新するプログラムを作成中です。
(WindowsアプリケーションでVB.NETです)
開発用サーバでは問題なく更新できたのですが、本番サーバでは下記エラーが発生し
登録できません。(ちなみにオラクルのバージョンは共に同一です)

「UpdateCommand の動的 SQL 生成は、キーである列情報を返さない
 SelectCommand に対してサポートされていません。」
 (System.InvalidOperationException)

エラーが発生している個所は、以下のソースのGetUpdateCommandメソッドです。

dim conn as OleDbConnection = New OleDbConnection(strConnString)
dim da as OleDbDataAdapter = New OleDbDataAdapter("Select * From XXX",conn)
dim cb as OleDbCommandBuilder = New OleDbCommandBuilder(da)

conn.Open()
cd.GetUpdateCommand() ←ここで例外発生

オラクルのテーブルの作成はどちらのサーバも同じように作っています。
また、アクセスや、オラクルのツールなどでこのテーブルの情報を見ても
同じようになっています(どちらのテーブルもプライマリキーは定義済み)

なぜこのようなことになるか心当たりのある方がいらっしゃいましたら
教授いただけないでしょうか。よろしくお願いいたします。





甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-02-11 17:41
OleDbDataAdapter クラスの概要に「OLE DB プロバイダによっては、ベース テーブルまたは主キー情報が返されないことに注意してください」と書かれています。とりあえずDataTable.PrimaryKey を確認して、プライマリキーに関する情報を取得できているか確認してみては?もし取得できていないなら、自前で設定すれば動作するんじゃないかな?

ちなみにOracleならODP.NETを使ったほうが無難ですよ。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-11 20:24
FillSchemeメソッド(スペル自信なし)を実行してからだと、うまくいくかもしれません。しかし、自動で生成されるUpdate文は、すべての列の同一性をチェックするようなコマンドになると思います。自分で作っておく方がよいと思います。
_________________
mino
会議室デビュー日: 2003/08/25
投稿数: 2
投稿日時: 2005-02-14 13:07
甕星さん、Jittaさん早速の回答ありがとうございました。

教えていただいた情報をもとに、色々と試してみましたが結局駄目でした。
結局、本番サーバのオラクルインスタンスを作り直したら、エラーが出なく
なりました。根本的な解決にはなりませんがとりあえず上手く出来たようです。

次のシステムからはこの辺りに留意して構築したいと思います。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)