- PR -

VS2005におけるAccess行追加時のオートナンバーID値取得

1
投稿者投稿内容
すけじい
会議室デビュー日: 2003/08/26
投稿数: 19
投稿日時: 2006-03-13 11:43
VisualStudio2005へ移行し、特にADO.NET2.0のTableAdapterを使用したDBアクセスの快適さに喜んでおります。
これまで、見通しの悪かった、DataAdapterやDataCommandに比べ、TableAdapterとDataSetを組み合わせた開発は快適です。
ですが、ここで困った問題がひとつ。

これまで、VS2003で、AccessのMDBを使った場合、オートナンバー値を取得するために、DataAdapterのRowUpdatedイベントをフェッチし、イベントハンドラ内部で取得していました。

' RowUpdatedイベントにハンドラを設定
AddHandler da.RowUpdated.AddressOf HandleRowUpdated
da.fill(tbl)

' ハンドラ
private Sub HandleRowUpdated(sender AS Object, e As OleDbRowUpdatedEventArgs)
' [略]イベントの種別を判定
' [略]SELECT @@IDENTITYをDataCommandでExecuteScalarする
' [略]結果を変数に保存
end sub

ですが、DataAdapterを使用しなくなったため、どうしたらよいのやら困っています。
コードでDataAdapterを生成すれば良いのはわかっていますが、何か時代の変化に逆行するようで。。。
DataSet/TableAdapterあたりを使った良い方法はないでしょうか?
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-03-13 13:54
こんにちは。

TableAdapter が DataAdapter を隠蔽してしまっているので迷いますよね。
海外の BBS ですが、すけじいさんと同じ疑問を解決している投稿があります。
http://207.46.248.238/msdn/showpost.aspx?postid=57791&siteid=1

partial classes を使って上手くやろう、ということですね。
すけじい
会議室デビュー日: 2003/08/26
投稿数: 19
投稿日時: 2006-03-13 22:26
ueさん、ありがとうございます。
うわあ、これは「プログラミングADO」の著者、Mr.セッパのリプライではないですか!
自分のADO(.NET)まわりの知識は全部、この方の著書からなので、恐縮です。

(僕のつたない英語力で読みますと)DataSetのデザイナコードで作られた、DataSetTableAdaptersのnamespace上で、TableAdapterクラスのパーシャルクラスを作って、そこで内包生成されてるDataAdapterを使えば、これまでと同じRowUpdatedイベントハンドラを使えるではないか、というわけですね!何と。。

正直、DataSet.Designer.Vbの中をはじめて見て、納得しました。
TableAdapterって、DataAdapterを内包したコンポーネントなんですね。

僕もこの投稿者と同じく、「TableAdapterがRowUpdatedイベントハンドラ持ってないのはきっとバグ」と思い込んでました。サッパさんのいう「TableAdapterは何も悪くない」ということで納得。

ueさん、ありがとうございました。久々にスカッとしました〜。
1

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