• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TableAdapter.Update 戻り値)

TableAdapter.Updateの戻り値

このQ&Aのポイント
  • TableAdapter.Updateを使用した場合、新規に登録したデータの主キーを取得する方法がわかりません。
  • TableAdapter.UpdateはUPDATEやINSERTなどの操作を簡単に行えますが、新規登録時の主キーの取得方法が分かりません。
  • TableAdapter.Updateの戻り値には反映した件数が返ってきますが、新規登録時の主キーを取得する方法が不明です。

質問者が選んだベストアンサー

  • ベストアンサー
noname#251971
noname#251971
回答No.1

質問意図をちゃんと捉えられているか若干微妙なところがありますが。。 おそらく、insertでレコード登録した際に、DB側で主キーの値が自動採番されるなどするのでその値を取得してローカルの情報を更新したい、というような内容かと想像します。 TableAdapter自体では無く、そのINSERT/UPDATE等で利用されるCommandクラスにはデータ登録の際に情報を戻す仕組みがあります。 それらの概要については以下などが参考になるかと思います。 https://msdn.microsoft.com/ja-jp/library/ks9f57t0%28v=vs.110%29.aspx https://msdn.microsoft.com/ja-jp/library/59x02y99%28v=vs.110%29.aspx ただ、上記に記載されている内容は少々状況が特定的過ぎて、すぐにはわかりずらいかと思いますので多少一般化した(つもりの)補足を記載します。 まず、CommandクラスのParametersにはParameterDirection.OutputやParameterDirection.ReturnValueのパラメータによって(もちろんクエリ側も値を戻すように書いて)出力値を取得する事が出来ます。 また、ParameterはDataColumnと対応させることができます。(DataTableなどでUpdate()をする場合、ParameterDirection.Inputのパラメータでは普通に行っているかと思います) 上記に加え、CommandのUpdatedRowSourceプロパティにてOutputParametersを設定することで、クエリの出力をDataTable(DataRow)に取り込むことが出来ます。 質問者さんが現在利用しているINSERT/UPDATEに利用しているストアドが具体的にどのように値を返すかわかりませんが、戻り値とあるのでもしかするとParameterDirection.ReturnValueを使うパターンかもしれません。 ちなみに当方は、returning句を利用してDB側で採番したIDとCREATEやMODIFY日時などを登録と同時に取得する、といった形で良く利用しています。 また、ついでに記載しておきますと、UpdatedRowSourceにFirstReturnedRecordを指定すると、出力パラメータではなくselect結果によるデータの反映(取得)を行うことが出来るようです。(実際に自分で使ったことはないですが) これは、INSERTのクエリで「insert into **** values(**); select **** from ***;」といった感じで、1つのコマンドで更新したレコードをselectして値を戻す(あるいは良く知りませんがそのほかの方法でレコードが返るようなクエリを指定する)といったような使い方になるようです。 またあるいは、ラウンドトリップ数の多少の増加やデータ転送量が気にならないような場合で、必要なデータを特定出来るのであればselect(Fill)し直す手もあるかとは思います。

kyokotan12
質問者

お礼

toras9000様、お世話になります。 説明不足で申し訳ございませんでした。 ご指摘通りDBから自動採番されたIDの取得が目的でございました。 ご紹介いただいたURLからいろいろな事が勉強できました。 Adapterのパラメータやメソッドの奥深さの片鱗を実感できました。 Insertの場合の戻り値は下記の記述で取得することができました。 Adapter.InsertCommand.Parameters("@RETURN_VALUE").Value.ToString 大変勉強になりました。 ありがとうございました。

関連するQ&A