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

时间:2013-08-09 09:43:10

标签: c# sql-server winforms listbox

我想在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();

3 个答案:

答案 0 :(得分:3)

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

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

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

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

当发现ListBox实际上是数据绑定时,您正在收到错误,因为SelectedItem属性会返回DataRowView而不是值。

在致电PID之前,您需要从DataRowView对象获取SqlCommand列的值。

答案 1 :(得分:0)

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

如果手动生成使用

listBox1.Items.Remove(i);

如果是数据绑定,则需要刷新绑定。

问候Jan。

答案 2 :(得分:0)

您可以改进一些事项:

  • 使用参数化命令
  • 不要混合代码和数据
  • 了解SQL注入攻击
  • 添加错误处理代码
  • 将db代码与UI清理代码分离为两种方法

这可能会解决您的问题。

修改

如果使用参数化命令,则传递一个类型,以便驱动程序知道如何处理和转义类型。将变量嵌入查询时,会调用.ToString()方法。可能存在许多错误,因为错误的假设是字符串表示符合您的预期。在这种情况下,这将工作。但!在其他情况下,它可能无效。这些错误实际上很难调试,因为它们只在某些情况下出现。

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

如果只是你默认使用了防御性编码,那么你可以避免许多麻烦。

始终假设环境是敌对的,用户输入是邪恶的,不信任任何人。你可以随意警告。