插入行和SQL Server CE
我想插入一行,并取回新行的身份像这样的东西检索新行的身份:插入行和SQL Server CE
INSERT INTO blah....;
SELECT @@IDENTITY as NewID;
我试图同时执行在C#中调用一个DbCommand对象的语句...它似乎不工作,或者我有错误。
我读过的精简版不支持在批处理中执行多个语句......但我也发现了这一点:
如果你想同时运行多个查询,则必须包括一个新的每个语句的行字符和每个语句结尾的分号。
来源:http://technet.microsoft.com/en-us/library/bb896140(SQL.110).aspx
所以它的工作原理或不...如果是的话我缺少什么?
(我知道我可以执行两个命令,并且工作正常,但我不知道是否我错过了一些东西)。
这看起来像一个文档错误,它是相反的。每个ExecuteNonQuery调用只能执行一条语句。
如果对于SQLCE [3.5 SP1](http://technet.microsoft.com/en-us/library/bb896140(SQL.100).aspx),[3.5 SP2]文档错误可以重复至少3次感到惊讶, (http://technet.microsoft.com/en-us/library/bb896140(SQL.105).aspx)和[4.0](http://technet.microsoft.com/en-us/library/bb896140( SQL.110)的.aspx)?我真的很困惑。 – 2013-11-20 11:22:21
你必须定义一个输出参数来获取标识值
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;
你确定吗?我正在使用DbCommand.ExecuteScalar(),它返回新的记录身份正常。它只需要一个单独的命令,而不是一个批处理命令。 – 2011-04-06 11:43:32
SQL Server Compact Edtion每条命令只支持一条语句。 [链接](http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/1d1d3267-dc29-470b-bb20-00487a39bc87/) – mariocase84 2011-04-06 13:41:33
此外,它似乎你必须“SELECT @@ IDENTITY “针对您已经运行”INSERT“的同一个开放连接。 – Agent007 2013-12-12 08:32:31
很多错误后与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;
}
你是什么意思的“似乎并不工作”[原文如此?怎么了?你有任何错误信息? – Guffa 2011-04-06 06:46:50