2017-04-16 67 views
-1

我需要刪除訪問數據庫中的某些數據,當點擊一個按鈕,它一直拋出一個與executeNonquery()相關的錯誤,我真的是新來的,我會感謝所有幫助,這裏是我的代碼需要刪除數據訪問數據庫中的c#

private void btnDelete_Click(object sender, EventArgs e) 
    { 
     OleDbConnection myDb = new OleDbConnection(connectionString + DBFile); 
     myDb.Open(); 
     if (ComboBoxSelection.SelectedIndex == 0) 
     { 
      OleDbCommand command = new OleDbCommand(); 
      command.Connection = myDb; 


      foreach (DataGridViewRow myRow in dataGridView1.SelectedRows) 
      { 
       string query = "DELETE FROM Clients WHERE ClientID = '{int.Parse(txtEdit.text)}'"; 
       command.CommandText = query; 

      } 
      command.ExecuteNonQuery(); 
      myDb.Close(); 

     } 


     else if (ComboBoxSelection.SelectedIndex == 1) 
     { 
      OleDbCommand command = new OleDbCommand(); 
      command.Connection = myDb; 


      foreach (DataGridViewRow myRow in dataGridView1.SelectedRows) 
      { 
       string query = "DELETE FROM Clients WHERE ClientID = '{txtEdit.text}'"; 
       command.CommandText = query; 



      } 
      command.ExecuteNonQuery(); 
      myDb.Close(); 
     } 
    } 
+0

第一步是顯示**完整**錯誤。編輯問題以添加例外和內部例外的文本(如果適用),無需截圖。 – Crowcoder

+0

什麼是錯誤信息?如果ClientID是數字類型字段,請不要使用撇號分隔符。 – June7

+0

這是一個字符串_'{int.Parse(txtEdit.text)}'_不是解析方法的結果。如果您想使用[此語法](https://msdn.microsoft.com/en-us/library/dn961160.aspx),則需要在整個字符串前加上$符號 – Steve

回答

2

製作了很多假設什麼你正在嘗試做的,這是在選定的行從數據庫中刪除所有的客戶端ID。這是一個很大的假設,因爲你在每行代碼示例中使用了相同的TextBox,但我猜這是一項正在進行的工作,最終你會到達那裏。

首先,命令和連接是一次性資源,所以你應該確保在完成它們之後將它們丟棄。一個常見的方法是在using塊中實例化它們,如下所示。

其次,你應該總是使用參數化查詢,而不是連接字符串。我不知道ClientID是一個字符串還是一個數字,但您似乎使用它兩種方式,但如果有人在文本框中輸入' OR 1=1; --,而組合框位於索引1上,那麼您最終可能會刪除所有內容。

最後,你有很多重複。基於我的假設,你可以清理你的代碼:

private void btnDelete_Click(object sender, EventArgs e) 
{ 
    string query = "DELETE FROM Clients WHERE ClientID = @ClientID"; 

    using (OleDbConnection myDb = new OleDbConnection(connectionString + DBFile)) 
    using (OleDbCommand command = myDb.CreateCommand()) 
    { 
     int clientid = 0; 

     command.CommandText = query; 

     OleDbParameter parClientID = new OleDbParameter("@ClientID", OleDbType.Integer); 
     command.Parameters.Add(parClientID); 

     myDb.Open(); 

     foreach (DataGridViewRow myRow in dataGridView1.SelectedRows) 
     { 
      //Assume your client id is in a cell of the row? Zero for first, One for second, etc. 
      if (int.TryParse(myRow.Cells[0].ToString(), out clientid)) 
      { 
       parClientID.Value = clientid; 
       command.ExecuteNonQuery(); 
      } 
     } 
    } 
}