当我执行一个语句时,Executenonquery有-1

时间:2012-06-23 22:37:34

标签: c# sql

我正在尝试从表中获取行并将它们插入另一个表中。为此,我写了这个简单的代码,但我无法弄清楚是什么问题。

如您所见,我在执行语句后使用了ExecuteNonQuery,然后使用messagebox查看输出,但消息框中的输出为-1

for (int i = 1; i <= 10; i++)
{
    SqlCommand cmd = new SqlCommand("Select exp_date from tbl_expences where exp_id='" + i + "'", con);

    int j = cmd.ExecuteNonQuery();

    MessageBox.Show(Convert.ToString(j));

    if (j > 1)
    {
       string date = cmd.ExecuteScalar().ToString();

       MessageBox.Show(date);
       SqlCommand cmd1 = new SqlCommand("update other_expensive set exp_date='" + date + "' where exp_id='" + i + "'", con);
    }
}

2 个答案:

答案 0 :(得分:2)

ExecuteNonQuery()用于INSERTUPDATEDELETE。如果您想使用ExecuteReader(),请使用SELECT

答案 1 :(得分:0)

为什么你会为此运行20(可能是30,取决于此代码中的其他内容)语句?

来自ExecuteNonQuery的文档:

  

对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括插入或更新操作影响的行数以及受触发器或触发器影响的行数。 对于所有其他类型的语句,返回值为-1 。如果发生回滚,则返回值也为-1。

(强调补充)

为什么不呢:

update oe set exp_date=e.exp_date
from
    other_expensive oe
       inner join
    tbl_expense e
       on
          oe.exp_id = e.exp_id
where
    e.exp_id between 1 and 10

将使用一个查询并行执行所有更新,并避免循环,以及您似乎尝试使用的“逐步”方法。