从 C# 代码中使用 SQL Server CE 选择 @@ IDENTITY

Posted

技术标签:

【中文标题】从 C# 代码中使用 SQL Server CE 选择 @@ IDENTITY【英文标题】:SELECT @@ IDENTITY using SQL Server CE from C# code 【发布时间】:2013-01-21 00:33:40 【问题描述】:

我在 SQL CE 中使用数据适配器/集,我确实创建了以下查询以插入到表中,然后选择 @@IDENTITY, 我希望这个 SELECT 语句每次插入表后都返回学生 ID,这是我的查询:

INSERT INTO [Student] ([Name], [Family], [Address], [Phonenumber])
VALUES(@Name,@Family,@Address,@Phonenumber);
SELECT  @@IDENTITY;

这是我如何调用查询:

int x = da.Insert("Albert", "Alexandra", "No4.Oxford", Telnum);

int x 假设返回我的 ID...

这是我得到的错误:

解析查询时出错。 [令牌行号=4,令牌行偏移量=1,错误令牌=SELECT]

Insert Query it self 它可以工作,但是一旦在最后添加SELECT @@ IDENTITY,我就会出错。

我真的不知道我做错了什么。

【问题讨论】:

您需要SELECT ID AS LastID FROM Student WHERE ID = @@Identity; 之类的内容,也请查看此链接Server @@Identity 你打电话给select @@ identity还是select @@identity?第一个会抛出错误,第二个会起作用。 查看 beth Massi 的这篇博文:blogs.msdn.com/b/bethmassi/archive/2009/09/15/… 【参考方案1】:

ExecuteNonQuery 的返回值将是这些查询影响的行数。所以你需要使用存储过程而不是单查询。

【讨论】:

【参考方案2】:

根据MSDN,CE 不支持每次执行多个命令,您需要同时执行两个命令。

【讨论】:

我认为你是对的!因为我可以单独检索最后一个 ID,但是一旦我将它们组合起来,我就会出错!这就是 SQL CE 的弱点!但我需要确定是否真的是这样!【参考方案3】:

如果您想在单个调用中执行此操作,则需要使用存储过程而不是Insert,因为它使用不返回任何记录的ExecuteNonQuery。否则,您需要在另一个调用中执行选择以确定身份。

ExecuteNonQuery 的返回值是一个整数,表示受您的调用影响的行数。

【讨论】:

以上是关于从 C# 代码中使用 SQL Server CE 选择 @@ IDENTITY的主要内容,如果未能解决你的问题,请参考以下文章

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

SQL Server CE 回滚不撤消删除

用于多个应用程序中的 C# 类库的 SQL Server CE 私有部署

在 SQL Server CE 和 C# 中获取新插入行的主键?

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

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