从 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 脚本文件?
用于多个应用程序中的 C# 类库的 SQL Server CE 私有部署