8

我正在尝试插入一行并通过以下方式取回新行的标识:

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

我正在尝试通过在 C# 中一次调用 DbCommand 对象来执行这两个语句......它似乎不起作用或者我有问题。

我读过紧凑版不支持批量执行多个语句......但我也发现了这一点:

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

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

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

(我意识到我可以执行两个命令并且效果很好,但我想知道我是否遗漏了什么)。

4

3 回答 3

8

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

于 2011-04-06T06:39:35.133 回答
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;
于 2011-04-06T07:03:22.233 回答
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;
}
于 2016-10-10T15:29:29.140 回答