我正在尝试插入一行并使用以下内容获取新行的标识:
INSERT INTO blah....;
SELECT @@IDENTITY as NewID;
我试图在C#中单独调用一个DbCommand对象来执行这两个语句......它似乎不起作用或者我有错误。
我读过Compact Edition不支持批量执行多个语句......但我也发现了这个:
如果要同时运行多个查询,则必须为每个语句包含一个换行符,并在每个语句的末尾加一个分号。
来源:http://technet.microsoft.com/en-us/library/bb896140(SQL.110).aspx
它是否有效......如果是这样,我错过了什么?
(我意识到我可以执行两个命令并且工作正常,但我想知道我是否遗漏了某些东西)。
答案 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;
}