2017-04-16 72 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(); 
      } 
     } 
    } 
}