此名称的SqlCeParameter已包含在此SqlCeParameterCollection中.错误

Ros*_*hmi 3 c# sql-server-ce

在这段代码中,我有一个按钮点击事件.每当我第一次点击按钮时,代码都能正常工作.但是,如果我在其他时间单击该按钮则会抛出错误.

我的代码是

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();
}
Run Code Online (Sandbox Code Playgroud)

Son*_*nül 6

看起来你试图@item第二次将你的参数添加到你的命令,这就是你得到错误的原因;

嘿! 您的命令已经有了这个命名参数.您无法在命令中添加相同的命名参数.那毫无意义.

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

command.Parameters.Clear();
command.Parameters.AddWithValue("@item", itemname);
Run Code Online (Sandbox Code Playgroud)

当然,不要使用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();
    }                 
}
Run Code Online (Sandbox Code Playgroud)