You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中如何获取Access数据库新增记录的自动生成主键值?

获取Access自增主键值的正确实现(OleDB)

要解决新增记录后获取自增主键的问题,别用重新查询数据库的方式(避免重复记录定位失败),直接用Access的@@IDENTITY函数即可,同时你的原代码存在SQL注入风险,必须改成参数化查询,以下是具体实现:

核心思路

在同一个数据库连接会话中,先执行INSERT操作,紧接着执行SELECT @@IDENTITY,这个函数会返回当前连接中最后生成的自增主键值,完全不会受重复记录影响。

完整代码示例

// 定义变量存储新生成的主键
int newPayInfoId = 0;

// 使用using块自动释放资源,避免连接泄露
using (OleDbConnection connection = new OleDbConnection("你的数据库连接字符串"))
{
    connection.Open();

    // 1. 执行插入操作(参数化写法)
    using (OleDbCommand insertCommand = connection.CreateCommand())
    {
        insertCommand.CommandText = @"
            INSERT INTO PayInfo 
            ([UserID], [FullName], [CardType], [CardNo], [CVV], [ExpDate], [Address])
            VALUES (@UserID, @FullName, @CardType, @CardNo, @CVV, @ExpDate, @Address)
        ";

        // 添加参数,替换原有的字符串拼接
        insertCommand.Parameters.AddWithValue("@UserID", Global.UserID);
        insertCommand.Parameters.AddWithValue("@FullName", PayInfo[6]);
        insertCommand.Parameters.AddWithValue("@CardType", PayInfo[0]);
        insertCommand.Parameters.AddWithValue("@CardNo", PayInfo[1]);
        insertCommand.Parameters.AddWithValue("@CVV", PayInfo[2]);
        insertCommand.Parameters.AddWithValue("@ExpDate", exp);
        insertCommand.Parameters.AddWithValue("@Address", adress);

        // 执行插入
        insertCommand.ExecuteNonQuery();
    }

    // 2. 获取刚生成的自增主键
    using (OleDbCommand idCommand = connection.CreateCommand())
    {
        idCommand.CommandText = "SELECT @@IDENTITY";
        // ExecuteScalar返回查询结果的第一行第一列
        newPayInfoId = Convert.ToInt32(idCommand.ExecuteScalar());
    }

    connection.Close();
}

// 返回新主键值(可根据需求调整返回逻辑)
return newPayInfoId;

关键说明

  • 为什么不用重新查询?:如果存在除主键外完全相同的记录,你无法精准定位到刚新增的那条,而@@IDENTITY基于当前连接会话,只会返回本次插入生成的ID,绝对准确。
  • 必须用参数化查询:原代码直接拼接SQL字符串,不仅容易因为字段值含单引号导致语法错误,还会被SQL注入攻击,参数化写法从根源解决这两个问题。

内容的提问来源于stack exchange,提问作者Milosz Wedrowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:15:34