正在插入SQL Server CE数据库文件并返回插入的id
本文关键字:插入 返回 文件 id CE SQL Server 数据库 | 更新日期: 2023-09-27 18:23:53
问题是:
我的查询
INSERT INTO TableName(val1,val2)values(1,2);
SELECT @@IDENTITY;
当我在服务器资源管理器的运行查询中运行它时,我得到了正确的结果。
但是当我使用ExecuteScalar
或ExecuteDataTable
时,我会得到一个错误,。。。查询返回空
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),NOT.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());
INSERT
语句没有返回任何内容,这是正确的行为使用TSQL的
OUTPUT
-子句。这将把插入或删除的行中的值作为记录集提供给您。因此,您可以使用ExecuteScalar
来获取此值。
假设您有一个具有以下结构的表
CREATE TABLE [dbo].[Table_1]
([ID] [int] IDENTITY(1,1) NOT NULL,
[Value1] [int] NOT NULL,
[Value2] [int] NULL ) ON [PRIMARY]
使用下面的SQL可以为您提供作为结果集插入的行的ID
插入表_1 OUTPUT插入ID值(1,2)