0

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

如您所见,我ExecuteNonQuery在执行语句后使用过,然后使用消息框查看输出,但消息框中的输出为-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);
    }
}
4

2 回答 2

2

ExecuteNonQuery()用于INSERT,UPDATEDELETE. ExecuteReader()如果您想使用,请使用SELECT.

于 2012-06-23T22:41:09.497 回答
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

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

于 2012-06-24T08:47:22.560 回答