0

一切正常,但不起作用的一件事是它正在为每个帐户做笔记,即使没有为该帐户完成/找到任何事情。

for (int j = 0; j < accounts.Length; j++)
        {
            SqlConnection connection = new SqlConnection(SqlDataSource1.ConnectionString);

            SqlCommand SqlComm = new SqlCommand("insert into TableHistory (id, startDate, dueDate, userid, amount, number, needsReview, offer, dateAdded, dateRejected, rejectedBy) " +
                       "select (select max(id) + 1 from Table1), startDate, dueDate, userid, amount, number, needsReview, offer, dateAdded, GETDATE(), @userID from Table1 where number = @number " +
                       "delete from Table1 where number = @number", connection);
            SqlComm.Parameters.Add("@number", SqlDbType.Int).Value = Convert.ToInt32(accounts[j].ToString());
            SqlComm.Parameters.Add("@userID", SqlDbType.Int).Value = userID;

            connection.Open();

            SqlComm.ExecuteNonQuery();

            connection.Close();

            NoteAccount note = new NoteAccount("Personal Note", accounts[j].ToString(), userID);
            note.makeNote();
        }

假设 Account 11 中没有任何内容Table1。什么都不会失败,因为 insert 语句不会触发,因为 select 语句不返回任何 from Table1,这很好。

但是note.makeNote();当不需要添加时,会触发并向帐户添加“个人”注释。如果帐户存在,是否有一种简单的方法可以仅添加注释Table1

4

2 回答 2

3

ExecuteNonQuery将返回您受影响的行数,因此您可以在此基础上进行检查。如果大于 0,则记下。

if(SqlComm.ExecuteNonQuery()>0)
{
   NoteAccount note = new NoteAccount("Personal Note", accounts[j].ToString(), userID);
   note.makeNote();
}
于 2013-04-24T21:58:14.473 回答
2

如果我理解正确,我认为您可以使用ExecuteNonQuery. 这将返回受查询影响的行数,因此您可以测试它是否大于 0,并且仅在大于 0 时才记下。

于 2013-04-24T21:58:50.943 回答