此代码应该提示消息:"成功返回"时,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)
因为导致无需更新的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)