【使い方】
OleDbDataAdapte の RowUpdated イベントを利用して、自動インクリメント列の値を取得します。
//データ登録時
//cn
//myOleDbAd Access 更新用 DataAdapter
//myIncKeyName 自動インクリメント列名
//myCmdGetIdentity 自動インクリメント値取得 OleDbCommand
// 自動インクリメント値を取得するコマンドを生成します。
myCmdGetIdentity = CreateGetIdentityCommand( cn );
// トランザクションが設定されている場合、コマンドに設定します。
myCmdGetIdentity.Transaction = tr;
// 新たに生成されたレコードの自動インクリメント値を取得するイベントを設定します。
myOleDbAd.RowUpdated += new OleDbRowUpdatedEventHandler(HandleRowUpdated);
<必要な追加更新ロジック>
/// <summary>
/// 新たに生成されたレコードの自動インクリメント値を取得するイベント
/// </summary>
/// <param name="sender">イベントのソース</param>
/// <param name="e">イベントデータ</param>
private void HandleRowUpdated(object sender, OleDbRowUpdatedEventArgs e)
{
//Debug.WriteLine("HandleRowUpdated Start ");
//正常に追加された場合、列の自動インクリメント値を取得します。
if ((e.Status == UpdateStatus.Continue) &&
(e.StatementType == StatementType.Insert))
{
e.Row[myIncKeyName] = (int) myCmdGetIdentity.ExecuteScalar();
e.Row.AcceptChanges();
}
}
/// <summary>
/// 自動インクリメント値を取得するコマンドを生成します。
/// </summary>
/// <returns>生成したコマンド</returns>
private OleDbCommand CreateGetIdentityCommand( OleDbConnection cn )
{
return new OleDbCommand("SELECT @@IDENTITY", cn);
}
|