使用ExecuteNonQuery和ExecuteScalar插入

本文关键字:插入 ExecuteScalar ExecuteNonQuery 使用 | 更新日期: 2023-09-27 18:12:06

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()

插入c#时
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()抛出以下错误

"指定的强制转换无效

使用ExecuteNonQuery和ExecuteScalar插入

删除

SET NOCOUNT ON;

因为它删除了行计数!