【问题标题】:SPROC insert with ExecuteNonQuery and ExecuteScalar使用 ExecuteNonQuery 和 ExecuteScalar 插入 SPROC
【发布时间】:2013-05-02 20:43:46
【问题描述】:

SQL 插入问题。运行存储过程以向表中插入行并返回创建的 ID。当我像这样运行它并有一个输出参数 @ID 并使用 ExecuteNonQuery() 它为我的 int idinserted 返回 -1 但确实给了我插入的 ID。自从插入记录以来,它不应该返回 1。我想使用 ExecuteNonQuery 来检查记录是否被插入,然后获取插入的 ID。

SQL 插入

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

"指定的强制转换无效

【问题讨论】:

  • 抱歉,这不是刚刚检查的问题。
  • OK,但是记录是否已经插入?

标签: c# sql insert executenonquery executescalar


【解决方案1】:

删除

SET NOCOUNT ON;

因为这样会删除行数!

【讨论】:

  • 呃……这就是问题所在。我花了很多时间研究拼写和连接问题。
猜你喜欢
  • 2019-08-27
  • 2011-06-29
  • 1970-01-01
  • 2011-02-27
  • 2013-07-17
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多