在SQL Server CE中插入行并检索新行的标识

时间:2011-04-06 06:33:17

标签: sql-server sql-server-ce identity sql-server-ce-4

我正在尝试插入一行并使用以下内容获取新行的标识:

INSERT INTO blah....;
SELECT @@IDENTITY as NewID;

我试图在C#中单独调用一个DbCommand对象来执行这两个语句......它似乎不起作用或者我有错误。

我读过Compact Edition不支持批量执行多个语句......但我也发现了这个:

  

如果要同时运行多个查询,则必须为每个语句包含一个换行符,并在每个语句的末尾加一个分号。

来源:http://technet.microsoft.com/en-us/library/bb896140(SQL.110).aspx

它是否有效......如果是这样,我错过了什么?

(我意识到我可以执行两个命令并且工作正常,但我想知道我是否遗漏了某些东西)。

3 个答案:

答案 0 :(得分:8)

这看起来像是一个doc错误,反之亦然。每个ExecuteNonQuery调用只能执行一个语句。

答案 1 :(得分:3)

您必须定义输出参数以获取标识值

sqlCommand Command = Conn.CreateCommand();
Command.CommandText = "insert into MyTable(Value1,Value2) values(MyValue,MyValue)"
Command.ExecuteNonQuery();
Command.CommandText = "select @ID = @@IDENTITY"
SqlParameter ID = new SqlParameter("@ID", SqlDbType.Int);
ID.Direction = ParameterDirection.Output;
Command.Parameters.Add(ID);
Command.ExecuteNonQuery();
int NewID = (int)ID.Value;

答案 2 :(得分:0)

在使用sql-server-ce之类的很多错误(例如“方向”无法输出)后,我得到了这个。

public static long GetIdentity(this IDbConnection connection)
{
    var cmd = connection.CreateCommand();
    cmd.CommandText = "SELECT @@IDENTITY";
    cmd.CommandType = CommandType.Text;
    var id = cmd.ExecuteScalar();
    return (long)(decimal)id;
}