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

如何从MS Access数据表提取自动编号值并转换为Int64(C# ASP.NET场景)

C# 从MS Access获取自动编号并转Int64的实现方法

核心逻辑说明

Access的默认自动编号为32位长整型(Int32),直接转换为Int64不存在精度丢失问题,转换前需先判空避免DBNull引发的异常。

实现步骤

1. 引入必要命名空间

using System.Data.OleDb;

2. 场景1:查询现有记录的id并转换

// 替换为你的Access文件路径
string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\your_database.accdb;Persist Security Info=False;";
long targetId = 0;

using (OleDbConnection conn = new OleDbConnection(connStr))
{
    conn.Open();
    string sql = "SELECT id FROM your_table WHERE 条件列 = ?";
    using (OleDbCommand cmd = new OleDbCommand(sql, conn))
    {
        // 替换为你的查询参数
        cmd.Parameters.AddWithValue("@param", "你的查询条件");
        object result = cmd.ExecuteScalar();
        
        // 先判空再转换,避免DBNull异常
        if (result != null && result != DBNull.Value)
        {
            targetId = Convert.ToInt64(result);
        }
    }
}

3. 场景2:插入新记录后获取最新自动编号并转换

Access不支持SCOPE_IDENTITY(),使用@@IDENTITY获取当前会话的最新自增id:

string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\your_database.accdb;Persist Security Info=False;";
long newId = 0;

using (OleDbConnection conn = new OleDbConnection(connStr))
{
    conn.Open();
    // 先执行插入操作
    string insertSql = "INSERT INTO your_table (列1, 列2) VALUES (?, ?)";
    using (OleDbCommand insertCmd = new OleDbCommand(insertSql, conn))
    {
        insertCmd.Parameters.AddWithValue("@col1", "值1");
        insertCmd.Parameters.AddWithValue("@col2", "值2");
        insertCmd.ExecuteNonQuery();
    }
    
    // 取最新自增id
    string getIdSql = "SELECT @@IDENTITY";
    using (OleDbCommand getIdCmd = new OleDbCommand(getIdSql, conn))
    {
        object result = getIdCmd.ExecuteScalar();
        if (result != null && result != DBNull.Value)
        {
            newId = Convert.ToInt64(result);
        }
    }
}

注意事项

  • 若使用.mdb格式的旧版Access文件,连接字符串的Provider替换为Microsoft.Jet.OLEDB.4.0即可
  • 不要直接用(long)result强转,若返回值为Int32类型时直接强转会抛类型转换异常,Convert.ToInt64()会自动处理兼容不同整数类型的转换
  • 多线程高并发插入场景下,@@IDENTITY不会出现取错id的问题,它的作用范围是当前数据库连接会话

内容的提问来源于stack exchange,提问作者Kaise karen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:54:04