- - PR -
VS2005におけるAccess行追加時のオートナンバーID値取得
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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あたりを使った良い方法はないでしょうか? |
|
投稿日時: 2006-03-13 13:54
こんにちは。
TableAdapter が DataAdapter を隠蔽してしまっているので迷いますよね。 海外の BBS ですが、すけじいさんと同じ疑問を解決している投稿があります。 http://207.46.248.238/msdn/showpost.aspx?postid=57791&siteid=1 partial classes を使って上手くやろう、ということですね。 |
|
投稿日時: 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