删除查询无法正常工作

时间:2015-03-04 10:47:18

标签: c# sql delete-row

我正在尝试从数据库中删除与在组合框中选择的ART相同的行。我以前工作过,但是当我更改数据库时,它应该从它停止工作中删除它并给了我一个error message。我确实根据数据库的变化更改了数据库连接等。

错误消息(希望图片有效) 我不知道为什么它说“将varchar值'R06018'转换为数据类型int时转换失败”,因为我在代码中的任何地方都没有R06018的值,也不是选定的行。

我在删除停止工作后尝试的代码,它只是删除没有任何额外的东西(我知道它没有处置但程序在尝试读取时崩溃,而且它只是为了找到问题)

try
  {
   SqlCommand inkoopartdelete = new SqlCommand("delete from ART where ART=" + artnr.SelectedItem + "", Connectie.connMEVO);
   drMEVO = inkoopartdelete.ExecuteReader();
   MessageBox.Show(this.artnr.SelectedItem + " verwijderd.");
  }
  catch (Exception e) { MessageBox.Show("" + e); }

我改变数据库连接之后的旧代码(因为我尝试了一小段代码用于删除而设置为注释)

  //SqlCommand inkoopdelete = new SqlCommand("delete from ART where ART=@art", Connectie.connMEVO_ART);
  //inkoopdelete.Parameters.Add("@art", SqlDbType.VarChar).Value = artnr.SelectedItem;
  //drMEVO = inkoopdelete.ExecuteReader();
  //try
  //{
  //    while (drMEVO.Read())
  //    { }
  //    MessageBox.Show(this.artnr.SelectedItem + " verwijderd.");
  //}
  //catch (SqlException v)
  //{
  //    MessageBox.Show("" + v);
  //}
  //inkoopdelete.Dispose();

我希望你们中的任何人都可以帮助我,因为我找不到问题。

发现问题,看到测试代码中的错误接受了awnser,真正的错误似乎是我读了一部分代码-_- ... srry

2 个答案:

答案 0 :(得分:1)

如果ART字段的类型为nvarchar,那么,如果您真的想使用字符串连接,则应将字符串值括在单引号中并写入

SqlCommand inkoopartdelete = new SqlCommand(@"delete from ART 
           where ART='" + artnr.SelectedItem + "'", Connectie.connMEVO);

这是一个有效的理由,可以尽快恢复使用参数化查询,就像您最初一样。避免这种情况的其他原因是,如果您的值具有嵌入的单引号,则整个文本在语法上会出错。最后,字符串连接是Sql注入攻击的开门之门

最后一点。如果要执行DELETE / INSERT或UPDATE之类的查询,请不要使用ExecuteReader。它可以工作,但没有必要为这种查询构建一个SqlDataReader。只需使用

 int affectedRows = inkoopartdelete.ExecuteNonQuery();

答案 1 :(得分:1)

更改以下声明: 你必须给出单引号。

SqlCommand inkoopartdelete = new SqlCommand("delete from ART where ART='" + artnr.SelectedItem + "'", Connectie.connMEVO);