插入SQL Server CE数据库文件并返回插入的id

问题是:

我的查询

INSERT INTO TableName(val1,val2)values(1,2); SELECT @@IDENTITY; 

当我在服务器资源管理器的运行查询中运行它时,我得到了正确的结果。

但是当我使用ExecuteScalarExecuteDataTable我得到一个错误,…查询返回null

 public object ExecuteScalre(string Query, CommandType type) { OpenConnection(); cmd.CommandText = Query; cmd.CommandType = type; object obj = null; try { obj = cmd.ExecuteScalar(); } catch { } finally { ReleaseResource(); } return obj; } public DataTable ExecuteDataTable(string Query, CommandType type) { OpenConnection(); cmd.CommandText = Query; cmd.CommandType = type; DataTable dt = new DataTable(); dataAdaptor = new SqlCeDataAdapter(cmd); try { dataAdaptor.Fill(dt); } catch { } finally { ReleaseResource(); } return dt; } 

注意:它是.sdf文件(SQL Server CE),而不是 .mdf ,所以我们不能使用存储过程

Sql Server Compact Edition在一个查询中不支持多个语句。
此数据库(通常)在单个用户场景中使用,因此您可以拆分命令并向数据库发送两个查询,第一个插入记录,第二个返回@@ IDENTITY值。

  cmd = new SqlCeCommand("INSERT INTO TableName(val1,val2)values(1,2)", cn); cmd.ExecuteNonQuery(); cmd.CommandText = "SELECT @@IDENTITY"; int result = Convert.ToInt32(cmd.ExecuteScalar()); 

这样做的原因是,您在一个Command对象中提交了两个sql命令。 INSERT语句没有返回任何内容,这是正确的行为。
使用TSQL的OUTPUT -Clause。 这将为插入或删除的行提供值作为记录集。 因此,您可以使用ExecuteScalar来获取此值。

假设您有一个具有以下结构的表

 CREATE TABLE [dbo].[Table_1] ([ID] [int] IDENTITY(1,1) NOT NULL, [Value1] [int] NOT NULL, [Value2] [int] NULL ) ON [PRIMARY] 

使用以下SQL为您提供作为结果集插入的行的ID

insert Table_1 OUTPUT Inserted.ID values(1,2)