SQL插入问题。运行存储过程以将行插入表并返回创建的ID。当我像这样运行它并且有一个输出参数@ID并使用ExecuteNonQuery()时,它为我的int idinserted返回-1,但确实给了我插入的ID。插入记录后不应该返回1。我想使用ExecuteNonQuery检查插入的记录然后获取插入的ID。
SQL INSERT
@person bigint,
@date datetime,
@ID bigint OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO table(person,DATE_ADDED)
VALUES (@person,@date)
SELECT @ID = SCOPE_IDENTITY()
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@person", person);
cmd.Parameters.AddWithValue("@date", DateTime.Now);
SqlParameter output = new SqlParameter("@ID", SqlDbType.Int);
output.Direction = ParameterDirection.Output;
cmd.Parameters.Add(output);
int idinserted = (int)cmd.ExecuteNonQuery();
if (idinserted > 0)
{
int ID = output.Value;
}
当我使用ExecuteScalar()
SQL INSERT
@person bigint,
@date datetime
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO table(person ,DATE_ADDED)
VALUES(@person,@date )
SELECT SCOPE_IDENTITY()
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@person", person);
cmd.Parameters.AddWithValue("@date", DateTime.Now);
long ID = (long)cmd.ExecuteNonScalar();
ExecuteScalar()
会抛出以下错误
“具体投射无效
答案 0 :(得分:0)
删除
SET NOCOUNT ON;
因为这会删除rowcount!