0

すべてが機能しますが、機能していないことの 1 つは、そのアカウントに対して何も行われていなかったり、見つかっていない場合でも、すべてのアカウントに対してメモを作成していることです。

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();
        }

アカウント 11 の に何もないとしTable1ます。selectステートメントがから何も返さないため、insertステートメントが起動しないため、何も失敗しません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 に答える