ODBC操作SQL Anywhere插入数据后获取自增主键求助
在SQL Anywhere(ODBC)插入时同步获取自增主键的解决方案
嘿,刚好我对SQL Anywhere的ODBC操作熟得很,这个问题其实用它自带的RETURNING语法就能轻松解决,不用额外执行查询语句,完全可以在同一条插入语句里拿到主键值!
核心思路
SQL Anywhere支持在INSERT语句末尾加上RETURNING子句,直接返回你需要的自增主键列值,配合ODBC的ExecuteScalar()方法就能一次性完成插入+主键获取。
具体代码调整
把你原来的插入语句改成下面这样,记得把<你的主键列名>替换成实际的主键字段:
cmd_ex.CommandText = @"INSERT INTO tabla (numero1, numero2, numero3, numero4...numeroN) VALUES (?,?,?,?,?) RETURNING <你的主键列名>";
完整示例代码
给你写个更清晰的示例,假设主键列叫id:
// 初始化ODBC命令对象(假设你已经做好了连接等前置操作) OdbcCommand cmd_ex = new OdbcCommand(); cmd_ex.Connection = yourOdbcConnection; // 构造带RETURNING的插入语句 cmd_ex.CommandText = @"INSERT INTO tabla (numero1, numero2, numero3) VALUES (?, ?, ?) RETURNING id"; // 添加参数(根据你的实际字段类型调整) cmd_ex.Parameters.AddWithValue("@numero1", 100); cmd_ex.Parameters.AddWithValue("@numero2", 200); cmd_ex.Parameters.AddWithValue("@numero3", 300); // 执行语句并获取自增主键 int newPrimaryKey = Convert.ToInt32(cmd_ex.ExecuteScalar()); Console.WriteLine($"新插入记录的主键是:{newPrimaryKey}");
注意事项
- 确保你的主键列确实设置了IDENTITY自增属性(SQL Anywhere里的自增列就是用IDENTITY定义的)。
- 这个语法支持SQL Anywhere 12及以上版本,如果你用的是更老的版本,可以试试
SELECT @@IDENTITY的方式,但需要在同一个连接事务里执行,不过RETURNING更可靠,推荐优先用它。 - 执行时一定要用
ExecuteScalar()而不是ExecuteNonQuery(),因为前者会返回查询结果(也就是主键值),后者只返回受影响的行数。
内容的提问来源于stack exchange,提问作者Pablo Tobar
相关产品推荐
相关产品推荐

