删除winform C#中的列表框数据

本文关键字:列表 数据 winform 删除 | 更新日期: 2023-09-27 18:27:04

我想在C#WinForm应用程序中使用ListBox从数据库中删除数据。我正在尝试此代码,但它不起作用。请告诉我如何从ListBox 中删除数据

它给了我这个错误

将varchar值"System.Data.DataRowView"转换为数据类型int.时转换失败

string i= listBox1.SelectedItem.ToString(); 
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
con.Open();
SqlCommand CmdAddProof = new SqlCommand("delete from Tb_IdProof where PID='" + i+ "'", con);
CmdAddProof.CommandType = CommandType.Text;
CmdAddProof.ExecuteNonQuery();
textBox1.Text = string.Empty;
ShowProof();
con.Close();

删除winform C#中的列表框数据

如果PIDint数据类型,则会出现数据转换错误,因为您将ID值作为varchar而不是int传递。

删除命令文本中的单引号将修复它:

SqlCommand CmdAddProof = new SqlCommand("delete from Tb_IdProof where PID=" + i, con);

编辑用户的以下进一步评论

由于ListBox实际上是数据绑定的,您收到错误是因为SelectedItem属性返回的是DataRowView而不是值。

在调用SqlCommand之前,您需要从DataRowView对象中获取PID列的值。

是手动生成还是数据绑定;

如果手动生成,则使用

listBox1.Items.Remove(i);

如果数据绑定,那么在这种情况下需要刷新绑定。

此致一月

您可以改进以下几点:

  • 使用参数化命令
  • 不要混淆代码和数据
  • 阅读有关SQL注入攻击的信息
  • 添加错误处理代码
  • 将数据库代码与UI清理代码分离为两种方法

这很可能会解决你的问题。

编辑

如果使用参数化命令,则向其传递一个类型,以便驱动程序知道如何处理和转义该类型。当您将变量嵌入到查询中时,会调用.ToString()方法。由于错误地假设字符串表示与您期望的一致,可能会出现许多错误。在这种情况下,这将起作用。但是在其他情况下,它可能不起作用。这样的错误真的很难调试,因为它们只在某些情况下出现。

您可以选择说应用程序只会与本地服务器通信。它永远不会暴露在网络中。然后你换了工作,申请突然变得非常成功,并接触到了互联网。你猜怎么着?

如果你默认使用防御密码,你本可以避免很多麻烦。

总是假设环境是敌对的,用户输入是邪恶的,不信任任何人。有人警告过你,你可以不同意。