以下のようなテーブルアダプターのpartialクラスを作成する。
※テーブルにはオートナンバーのID列が存在する。
using System.Data; using System.Data.OleDb; namespace AdapterRowUpdated.TESTDataSetTableAdapters { public partial class TESTTableAdapter { public void AddRowUpdatedEventHandler() { this.Adapter.RowUpdated += new OleDbRowUpdatedEventHandler(Adapter_RowUpdated); } /// <summary> /// テーブルのRowUpdateイベント(TableAdapter.Update() 直後に走る) /// 新規挿入した行のIDを取得 /// </summary> void Adapter_RowUpdated(object sender, OleDbRowUpdatedEventArgs e) { if (e.Status == UpdateStatus.Continue && e.StatementType == StatementType.Insert) { OleDbDataAdapter da = (OleDbDataAdapter)sender; OleDbCommand cmd = new OleDbCommand("SELECT @@IDENTITY", da.UpdateCommand.Connection); if (da.UpdateCommand.Transaction != null) { cmd.Transaction = da.UpdateCommand.Transaction; } ((TESTDataSet.TESTRow)e.Row).ID = (int)cmd.ExecuteScalar(); } } } }
実際にUPDATEを実行する側では、テーブルアダプターのUPDATE実行前にAddRowUpdatedEventHandlerメソッドを呼び出す。
var ta = new TESTDataSetTableAdapters.TESTTableAdapter(); ta.AddRowUpdatedEventHandler(); ta.Update(TESTDataTable); ta.Dispose();
こうすることにより、Updateの引数で渡したTESTDataTableのID列にオートナンバーの値が入った状態になる。