代码未显示预期消息

0 c# database

此代码应该提示消息:"成功返回"时,textbookid.Text=not empty string并提示消息:"选择错误"时textbookid.Text=empty string.问题是,当textbookid.text=empty string代码提示:"成功返回"而不是提示"选择错误".

try
{

  connection.Open();

  OleDbCommand command = new OleDbCommand();
  command.Connection = connection;

  string cb = "UPDATE book SET [Location] = 'lib' WHERE [Book_Id]='"
            + textbookid.Text
            + "'"
            ;

  command = new OleDbCommand(cb);
  command.Connection = connection;

  command.ExecuteReader();

  MessageBox.Show( "Successfully returned",
     "Book Details",
     MessageBoxButtons.OK,
     MessageBoxIcon.Information
     );

  connection.Close();


  //delete_records();
  //refs();
  //refchk();

}
catch
{
  MessageBox.Show("Selection Error.");
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 5

因为导致无需更新的WHERE条件不会触发任何异常.

在任何情况下,你都错误地编码.您需要在连接和命令周围使用using语句,然后需要使用参数化查询来避免Sql Injection和解析问题,最后,与UPDATE/INSERT/DELETE语句一起使用的正确方法是ExecuteNonQuery.顺便说一句,此方法返回您的命令更改的行数,您可以使用它来发出错误消息,以防您的查询没有更改任何内容...

try
{
    using(OleDbConnection connection = new OleDbConnection(.....))
    using(OleDbCommand command = new OleDbCommand(cb, connection))
    {
        connection.Open();
        string cb = @"UPDATE book SET [Location] = 'lib' 
                      WHERE [Book_Id]= ?";

        command.Parameters.Add("@p1", OleDbType.VarWChar).Value = textbookid.Text;
        int rowsUpdated = command.ExecuteNonQuery();
        if(rowsUpdated > 0)
             MessageBox.Show("Successfully returned", ....);
        else
             MessageBox.Show("Selection Error."); 
     }
}
catch(Exception ex)
{
    MessageBox.Show(ex.Message); 
}
Run Code Online (Sandbox Code Playgroud)

当然,我假设您要为任何情况发出错误消息,其中命令导致什么都没有更新,而不仅仅是在文本框为空的情况下.在此代码之前,可以使用单行轻松阻止此操作

if(string.IsNullOrWhiteSpace(textbookid.Text))
   return;
Run Code Online (Sandbox Code Playgroud)