- PR -

主キーのないテーブルへのUPDATE

投稿者投稿内容
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2005-12-26 12:35
はじめまして、よろしくお願いいたします。

下記のBで取得しているテーブルには主キーがありません。
たぶん、主キーがないDatatableをUPDATEしようとしてExceptionが発生します。
主キーがないテーブルのデータをUPDATEするにはどうすればいいのでしょうか?

地道にSQLを作成/発行していくしかないのでしょうか?
わかる方いたら教えてください。m(__)m

なお、以下の方法でODP.NET+ADO.NETでDBからデータを取得しています。
 OracleCommand mainCmd = new OracleCommand(strSQL, Cnn); …@
 adpSub = new OracleDataAdapter(mainCmd); …A
 adpSub.Fill(dsSub,tableName);                …B

で、取得したデータを以下の方法で編集し、更新をかけようとするとCでExceptionが発生しました。
 
 DataRow drCurrent;
 drCurrent = dsSub.Tables[0].NewRow();
drCurrent["ID"] = txtID.Text;
drCurrent["NAME"] = txtName.Text;
drCurrent.EndEdit();

OracleCommandBuilder objCommandBuilder = new OracleCommandBuilder(adpSub);
adpSub.Update(dsSub,tableName); … C

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-12-26 12:51
主キーが無い状態では、何をキーにしてUpdateして良いのかソフトウェアは判断できません。SqlDataAdapter.UpdateCommandプロパティを設定して、Update用のSQL分を提供する必要があるでしょう。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-12-26 13:10
OracleCommandBuilderがどんなSQLを自動生成してるのか見てみるのも良いかもです。
http://www.atmarkit.co.jp/fdotnet/basics/adonet05/adonet05_03.html
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2005-12-26 14:58
甕星さん、ぼのぼのさん 回答ありがとうございます。

>主キーが無い状態では、何をキーにしてUpdateして良いのかソフトウェアは判断できません。

考えてみればそうですね…
キーがわからないのに動的にできるはずないですね。
ちょっと、知識が足りてませんでしたm(__)m

勉強してきます。
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2005-12-26 15:35
ORACLEであれば
ROWNUMを取得しておき
更新時に
WHERE ROWNUM = 更新行のROWNUM
としてやればいけるとは思います。

あくまで行が特定できるDB設計を
心がけることが優先されるとは思いますが。
lei2
会議室デビュー日: 2005/06/22
投稿数: 19
お住まい・勤務地: 東京都23区内
投稿日時: 2005-12-26 15:56
引用:

PoHさんの書き込み (2005-12-26 15:35) より:
ORACLEであれば
ROWNUMを取得しておき
更新時に
WHERE ROWNUM = 更新行のROWNUM


ROWNUM じゃなくて ROWID だったような・・・。
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2005-12-26 16:17
ROWIDですねすいません
ROWNUMだと一意に特定される保障ないですね。
ROWNUMが2以上は更新できなかったかも。
しかもソート前に振られますし
使い勝手悪いのでほとんど使ったこと無いです。

ROWIDなら物理アドレスを指定するので
一意に特定できますし、
レスポンスも速いですしね。

主キーを設定するように見直すのが
最も良いとは思いますが・・・
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2005-12-26 17:29
みなさん、回答ありがとうござますm(__)m

>主キーを設定するように見直すのが
そうですよね…
ただ、今回開発を行う対象のDBスキーマはすでに確定しているようなので…

ちなみに、主キーはないのですが、外部キーはあります。
(外部キーの参照先は、他テーブルの主キーです。)
この場合、外部キーが設定されていれば、UPDATEは普通にできるのでしょうか?
(まだ未確認なんです…聞いてばかりですいません;)

あと、さきほどUpdateCommandを使うとよいとのアドバイスを頂いたのですが、MSDN等で調べてみても、イマイチ仕様が理解できませんした(−−;
主キーのないテーブルのデータを更新するための、簡単なサンプルをご提示していただけると、早めに理解できると思うので、どなたか教えてくださいm(__)m

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