这个名称的SqlCeParameter已经包含在这个SqlCeParameterCollection中.错误
本文关键字:SqlCeParameterCollection 错误 包含 SqlCeParameter | 更新日期: 2023-09-27 17:49:18
在这段代码中,我有一个按钮单击事件。每当我第一次单击按钮时,代码都能正常工作。但是如果我点击这个按钮,它会抛出错误。
我的代码是private void button2_Click(object sender, EventArgs e)
{
string itemname = comboBox1.SelectedItem.ToString();
con.Open();
command.CommandText = "DELETE FROM pricedata WHERE Item=@item";
command.Connection = con;
command.Parameters.AddWithValue("@item", itemname);
command.ExecuteNonQuery();
con.Close();
}
看起来你试图第二次添加你的@item
参数到你的命令,这就是为什么你得到一个错误;
嘿!您的命令中已经有这个命名参数。你不能加上与命令的同名参数相同。这是毫无意义的。
您可以使用.Clear()
方法在执行命令之前清除命令的参数。
command.Parameters.Clear();
command.Parameters.AddWithValue("@item", itemname);
当然,不要使用AddWithValue
方法。它有时可能产生意想不到的结果。使用.Add()
重载来指定参数类型和大小。最好使用using
语句自动解除SqlCeConnection
和SqlCeCommand
,而不是手动调用Close
或Dispose
方法。本地连接总是更可取的。最好打开和关闭连接尽可能接近它们的使用。ADO。. NET将执行连接池,因此这一点都不昂贵。
private void button2_Click(object sender, EventArgs e)
{
using(var con = new SqlCeConnection(conString))
using(var command = con.CreateCommand())
{
command.CommandText = "DELETE FROM pricedata WHERE Item = @item";
command.Parameters.Clear();
command.Parameters.AddWithValue("@item", comboBox1.SelectedItem.ToString());
con.Open();
command.ExecuteNonQuery();
}
}
您的连接对象是外部的,对于这个方法是全局的。只要缩短它的生命周期,使其本地化:
conn.Open();
command = new SqlCeCommand();
command.Connection = conn;
...
command.Dispose();