2016-03-05 41 views
0

我有一個接口,其中我的一個功能包括從Access中刪除序列號。如果序列號確實存在,那麼它將刪除所有與確認消息一致的內容。問題是,我可以輸入一個不存在的序列號,它的行爲就像是刪除它一樣。如何在點擊刪除按鈕時檢查值是否存在,以便我可以向用戶發出通知?添加到Access時檢查現有值

private void btnDelete_Click(object sender, EventArgs e) 
    { 
     if (!string.IsNullOrEmpty(txtSerial.Text)) 

      try 
      { 
       connection.Open(); 
       OleDbCommand command = new OleDbCommand(); 
       command.Connection = connection; 
       string deleteEntry = "delete from Inventory where SerialNumber='" + txtSerial.Text + "' "; 
       DialogResult result = MessageBox.Show("ARE YOU SURE YOU WANT TO DELETE SERIAL NUMBER = " + txtSerial.Text + " ? ", "LAST CHANCE !", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); 

       if (result.Equals(DialogResult.OK)) 
       { 
        command.CommandText = deleteEntry; 
        command.ExecuteNonQuery(); 
        MessageBox.Show("Data Has Been Deleted".PadLeft(28)); 
       } 

       if (dataGridFB.DataSource != null) 
       { 
        dataGridFB.DataSource = null; 
        txtSerial.Clear(); 
        comboSerial.Text = string.Empty; 
        comboPart.Text = string.Empty; 
        comboRO.Text = string.Empty; 
        comboLocation.Text = string.Empty; 
        comboSerial.Items.Clear(); 
        comboPart.Items.Clear(); 
        comboRO.Items.Clear(); 
        comboLocation.Items.Clear(); 
       } 
       else 
       { 
        dataGridFB.Rows.Clear(); 

       } 

       ItemsLoad(); 
       connection.Close(); // CLOSE HERE OR YOU CANNOT ENTER RECORDS SIMULTANEOUSLY 

      } 
      catch (OleDbException ex) 
      { 
       MessageBox.Show(ex.Message); 
       connection.Close(); 
      } 
    } 
+0

什麼關係呢? 'int rows = command.ExecuteNonQuery();'會告訴你有多少行受到影響。另外,對SQL使用SQL參數而不是字符串concat。 – Plutonix

回答

3

OleDbCommand.ExecuteNonQuery返回受該命令影響的行數。如果沒有要刪除的行,則返回值將爲零。所以很容易發現這種情況

int rowsDeleted = command.ExecuteNonQuery(); 
if(rowsDeleted == 0) 
    MessageBox.Show("No Serial number found to delete"); 
else 
    .... 

說,請記住,字符串連接建立命令文本被認爲是不好的做法,你永遠不應該使用它。參數化查詢是創建需要用戶輸入命令的唯一正確途徑.....

string deleteEntry = "delete from Inventory where [email protected]" 
command.CommandText = deleteEntry; 
command.Parameters.Add("@num", OleDbType.VarWChar).Value = txtSerial.Text; 
int deletedRows = command.ExecuteNonQuery(); 
+2

我知道你會得到它;) – Plutonix

+2

乏味星期六下午,至少我們有這樣的...... – Steve

+0

所以參數化應該用於所有功能 - 更新,刪除,插入等....? – CamlCase

0

OleDbCommand.ExecuteNonQuery方法你使用返回一個Int32表示受影響的行數。你可以用它來查明一行是否被刪除。

if (command.ExecuteNonQuery() > 0) 
{ 
    // Row was deleted 
} 
else 
{ 
    // Row was not deleted 
} 
0

您可以在如果基於語句做Console.WriteLine("Nothing to delete"),但如果它被編譯,你無法看到控制檯,如果基於語句之後嘗試MessageBox.Show("Nothing to delete")功能。

 if (command.ExecuteNonQuery == 0) 
    { 
     Console.WriteLine("0-removed") 
    } 
else 
    { 
     Console.WriteLine("not deleted") 

舉個例子...

private void timer1_Tick(object sender, EventArgs e) 
     if (command.ExecuteNonQuery == 0) 
    { 
     Console.WriteLine("0-removed") 
    } 
else 
    { 
     Console.WriteLine("not deleted")