繁体   English   中英

在Winform C#中删除列表框数据

[英]delete listbox data in winform C#

我想使用C#WinForm应用程序中的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();

如果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注入攻击的信息
  • 添加错误处理代码
  • 将db代码与UI清理代码分离为两种方法

这可能会解决您的问题。

编辑

如果使用参数化命令,则将其传递给类型,以便驱动程序知道如何处理和转义该类型。 当您将变量嵌入查询中时,将调用.ToString()方法。 由于错误假设字符串表示形式符合您的预期,因此可能会有许多错误。 在这种情况下,这将起作用。 但! 在其他情况下,它可能不起作用。 这些错误确实很难调试,因为它们仅在某些情况下才会出现。

您可以选择说该应用程序仅与本地服务器对话。 它永远不会暴露给网络。 然后,您换了工作,应用程序突然变得非常成功,并且可以访问Internet。 你猜怎么着?

如果仅在默认情况下应用防御性编码,则可以避免许多麻烦。

始终假定环境是敌对的,用户输入是邪恶的,并且不信任任何人。 随时不同意您的警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM