<转载>OleDb操作Access数据库:新增记录时获取自动编号的主键值

//打开数据库的一般方法
OleDbConnection cnn = new OleDbConnection(sCnn);
cnn.Open();
DataTable table = new DataTable();
try
{
    OleDbCommand cmd = new OleDbCommand(sCommand, cnn);
    cmd.CommandType = cmdType;
    //构建DataAdapter
    OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
    //填充数据
    table = new DataTable(sDataTableName);
    adapter.Fill(table);
    cnn.Close();
    table.PrimaryKey = new DataColumn[1] { table.Columns[0] };
    OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
    builder.QuotePrefix = "[";
    builder.QuoteSuffix = "]";
    adapter.InsertCommand = builder.GetInsertCommand();
    adapter.DeleteCommand = builder.GetDeleteCommand();
    adapter.UpdateCommand = builder.GetUpdateCommand();
    adapter.RowUpdated += new OleDbRowUpdatedEventHandler(OnRowUpdated);
}
catch
{
}
 
 
//========================
//OleDbRowUpdatedEventHandler实例
protected void OnRowUpdated(object sender, OleDbRowUpdatedEventArgs e)
{
    if ((e.Status == UpdateStatus.Continue) && e.StatementType == StatementType.Insert)
    {
        int newID = 0;
        OleDbCommand cmdGetId = new OleDbCommand("SELECT @@IDENTITY", e.Command.Connection);
        newID = (int)cmdGetId.ExecuteScalar();
        e.Row["id"] = newID;
        if (newID == 0)
        {
            MessageBox.Show("获取ID值错误!");
        }
    }
}
 
//========================
//修改row的数据
    System.Data.DataTable tblChange = table.GetChanges();
    affectRowCount = adapter.Update(tblChange);
    if (mode == modeNew)
    {
        row["id"] = tblChange.Rows[0]["id"];
    }
    table.AcceptChanges();

  

转载于:https://www.cnblogs.com/ChangTan/archive/2011/12/27/2303787.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值