以下のようなテーブルアダプターの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列にオートナンバーの値が入った状態になる。
