在 SQL Server CE 和 C# 中获取新插入行的主键?
Posted
技术标签:
【中文标题】在 SQL Server CE 和 C# 中获取新插入行的主键?【英文标题】:Getting the primary key of a newly inserted row in SQL Server CE and C#? 【发布时间】:2012-07-11 01:30:56 【问题描述】:我正在向自动生成主键的 SQL Server CE 表中插入,插入完成后我将如何获取主键?
【问题讨论】:
【参考方案1】:假设您的主键是一个标识字段,您可以在插入新行后使用查询SELECT @@IDENTITY
。
【讨论】:
并且不要关闭上面的 INSERT 和 SELECT 之间的连接。 @keith 请问如何在本地验证中获取这个@@Identity 值?提前致谢【参考方案2】:你必须小心这样做。您需要做的是在一个事务中将您的选择设置为:
IDbCommand.CommandText += "; select scope_identity()";
object rtn = cmd.ExecuteScalar();
return (long)(decimal)rtn;
事务中的单个选择是关键,因为调用 select scope_identity() 不是插入的主键,它是最近的插入。因此,您最终可能会得到另一个插入的主键,该主键发生在您的插入之后,但在您请求最近的 PK 插入之前。
注意:scope_identity() 可能(重复可能)现在与 IDbCommand 相关联,但过去并非如此,遵循上述内容是安全的。
【讨论】:
@ErikEJ - 你遇到了什么问题?我已经成功地将它与 CE 一起使用。 SQL Server Compact 不能使用同一语句中的多个命令或 socpe_identity() - 你是说 Express 吗?【参考方案3】:你可以发现你的主键是表中的一个标识字段
SELECT IDENT_CURRENT(‘表名’)
http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/
【讨论】:
以上是关于在 SQL Server CE 和 C# 中获取新插入行的主键?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 C# 代码将 SQL Server CE 迁移到 SQL Server 2012 Express
从 C# 代码中使用 SQL Server CE 选择 @@ IDENTITY
C# nUnit 测试失败,说 SQL Server CE 约束实际上不存在