C# 插入SQL Server CE数据库文件并返回插入的id
问题是: 我的问题C# 插入SQL Server CE数据库文件并返回插入的id,c#,sql-server-ce,C#,Sql Server Ce,问题是: 我的问题 INSERT INTO TableName(val1,val2)values(1,2); SELECT @@IDENTITY; 当我在服务器资源管理器的运行查询中运行它时,我得到了正确的结果 但是当我使用ExecuteScalar或ExecuteDataTable时,我得到一个错误,。。。查询返回空值 public object ExecuteScalre(string Query, CommandType type) { OpenConnection();
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),不是.mdf
,因此我们不能使用存储过程原因是,您在一个命令对象中提交两个SQL命令。INSERT
语句没有返回任何内容,这是正确的行为。使用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
插入表_1输出插入的.ID值(1,2)
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());
可以显示执行查询的代码吗?公共对象ExecuteScalre(字符串查询,CommandType){OpenConnection();cmd.CommandText=query;cmd.CommandType=type;object obj=null;尝试{obj=cmd.ExecuteScalar();}catch{}最后{ReleaseResource();}返回obj;}or@OsamaElfar请注意,您可以编辑您的问题。上述代码应通过编辑包含在问题中。删除try/catch。并检查异常。创建空的try/catch是隐藏代码中错误的有效方法。这是跟踪中的错误:解析查询时出错。[Token line number=1,Token line offset=103,Token in error=SELECT]重要的一点是,两条命令之间的连接应该保持打开状态。如果我们谈论的是Sql Server,这将是正确的(在这种情况下,double语句也可以工作)但是OP使用的是Sql Server Compact Edition,因此没有可用的输出。