问题是:
我的查询
INSERT INTO TableName(val1,val2)values(1,2);
SELECT @@IDENTITY;
当我从服务器资源管理器运行查询时,我得到了正确的结果。
但是当我使用ExecuteScalar
或ExecuteDataTable
时出现错误,...查询返回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), NOT .mdf
,因此我们无法使用存储过程
答案 0 :(得分:6)
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());
答案 1 :(得分:-1)
原因是您在一个Command对象中提交了两个sql命令。 INSERT
语句确实没有返回任何内容,这是正确的行为
使用 OUTPUT
-Clause of TSQL。这将为插入或删除的行提供值作为记录集。因此,您可以使用 ExecuteScalar
来获取此值。
假设您有一个具有以下结构的表
CREATE TABLE [dbo].[Table_1]
([ID] [int] IDENTITY(1,1) NOT NULL,
[Value1] [int] NOT NULL,
[Value2] [int] NULL ) ON [PRIMARY]
使用以下SQL为您提供作为结果集插入的行的ID
插入Table_1 OUTPUT Inserted.ID值(1,2)