在 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

带有sql server ce的C#小型数据库项目

C# nUnit 测试失败,说 SQL Server CE 约束实际上不存在

SQL Server CE 或 Access 用于使用 c# 的可移植数据库?

如何从 C# 动态运行 SQL Server CE [Windows mobile] 中的 SQL 脚本文件?