这个名称的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();
}

这个名称的SqlCeParameter已经包含在这个SqlCeParameterCollection中.错误

看起来你试图第二次添加你的@item参数到你的命令,这就是为什么你得到一个错误;

嘿!您的命令中已经有这个命名参数。你不能加上与命令的同名参数相同。这是毫无意义的。

您可以使用.Clear()方法在执行命令之前清除命令的参数。

command.Parameters.Clear();
command.Parameters.AddWithValue("@item", itemname);

当然,不要使用AddWithValue方法。它有时可能产生意想不到的结果。使用.Add()重载来指定参数类型和大小。最好使用using语句自动解除SqlCeConnectionSqlCeCommand,而不是手动调用CloseDispose方法。本地连接总是更可取的。最好打开和关闭连接尽可能接近它们的使用。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();
相关文章:
  • 没有找到相关文章