SPROC插入ExecuteNonQuery和ExecuteScalar

时间:2013-05-02 20:43:46

标签: c# sql insert executenonquery executescalar

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()会抛出以下错误

  

“具体投射无效

1 个答案:

答案 0 :(得分:0)

删除

SET NOCOUNT ON;

因为这会删除rowcount!