代码未显示预期消息

时间:2015-10-02 17:17:20

标签: 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.");
}

3 个答案:

答案 0 :(得分:5)

因为WHERE条件导致无法更新,所以不会触发任何异常。

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

function copySpreadSheet(newSpreadSheetName) {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();
  var data = sheet.getSheetValues(1, 1, 1000, 26);  
  var newSheet = SpreadsheetApp.create(newSpreadSheetName)
  newSheet.getSheetByName("Sheet1")
          .getRange(1,1,1000,26).setValues(data);

}

function main() {
  copySpreadSheet("some_Spreadsheet");
}

当然,我假设您希望在任何情况下发出错误消息,其中命令不会更新任何内容,而不仅仅是文本框为空的情况。在此代码

之前,可以使用单行轻松阻止此操作
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); 
}

答案 1 :(得分:3)

您似乎没有返回"Selection Error",因为它位于catch区块中。如果您不知道,catch仅在try中的代码返回错误时才会执行。

在您的情况下,您可能想尝试以下内容:

if (string.IsNullOrEmpty(textbookID.Text))
{
    MessageBox.Show("Selection Error.");
}
else
{
    MessageBox.Show("Successfully returned", "Book Details", MessageBoxButtons.OK, MessageBoxIcon.Information); 
}

注意,如果字符串为... null或为空,则string.IsNullOrEmpty将返回true。还有string.IsNullOrWhitespace,如果string为null,为空或仅为空格,则返回true,即" "

答案 2 :(得分:1)

仅因为textbookid.text为空,它仍然是有效的SQL命令。事先单独检查,例如:

if(String.IsNullOrWhiteSpace(textbookid.Text))
{
    MessageBox.Show("Selection Error.");
    return;
}

try 
//the rest of your code