【问题标题】:Parameter @un must be defined必须定义参数@un
【发布时间】:2021-04-17 11:17:21
【问题描述】:

我收到了这个错误

"MySql.Data.MySqlClient.MySqlException: '遇到致命错误 在命令执行期间。", "MySqlException: 参数 '@un' 必须是 已定义。”

老实说,我不知道该怎么做,我只是在关注我的朋友在做什么,而我只是编码方面的新手。这是我的代码。

private void BTNDELETE_Click(object sender, EventArgs e)
{
        var c = cmd.Parameters;
              
        con.ConnectionString = Properties.Settings.Default.sampledb_it11ConnectionString;
        con.Open();
        cmd.Connection = con;
        cmd = new MySqlCommand("delete tbl_user set username=@un, password=@pw, usertype=@ut, loginname=@ln where username=@un,", con); 
        c.Clear();
        c.AddWithValue("@un", TXTUN.Text);
        c.AddWithValue("@pw", TXTPW.Text);
        c.AddWithValue("@ut", CBOUT.Text);
        c.AddWithValue("@ln", TXTLN.Text);
        cmd.ExecuteNonQuery();
        con.Close();

        MessageBox.Show("Record has been deleted", "Deleting Successful", MessageBoxButtons.OK, MessageBoxIcon.Information);
        TXTUN.Text = "";
        TXTPW.Text = "";
        TXTCPW.Text = "";
        TXTLN.Text = "";
        CBOUT.Text = "";
        TXTUN.Focus();
        DG_Refresh();

        TXTUN.Enabled = true;
}

【问题讨论】:

  • delete tbl_user set... 不是正确的 sql。您是真的要删除,还是要更新?
  • 你到底想做什么?我不熟悉 MySQL,但似乎没有 SET for DELETE 声明。 dev.mysql.com/doc/refman/8.0/en/delete.html 你要改用UPDATE 吗?你的 sql 查询看起来不对。
  • 至于你的错误,MySql使用的是位置参数,没有命名,所以你需要再添加一个参数,以便第二次使用un。但是,您必须先决定是删除还是更新。
  • 抱歉,我想删除一条记录,正确的说法应该是什么?
  • DELETE 删除一整行,您不必传递所有要删除的字段,您只需要一个 WHERE 子句将行限制为您想要的行。

标签: c# mysql


【解决方案1】:

错误或“MySqlException:必须定义参数'@un'。”是由 MySqlCommand 对象的未定义参数引起的。将参数存储在'c'中是不正确的:

var c = cmd.Parameters;

c.AddWithValue("@un", TXTUN.Text);

我建议你修改为:

cmd.Parameters.AddWithValue("@un", TXTUN.Text);

另外,sql 脚本搞砸了。从 MessageBox 和按钮的名称来看,您的意思似乎是删除数据库中的一行。所以脚本应该是:

cmd = new MySqlCommand("delete tbl_user where username=@un,", con);

看起来您的朋友所做的是在您要删除一行时更新一行。关键字“set”应与“update”命令配对。

并且在分配连接后创建新的MySqlCommand实例是不正确的。

cmd.Connection = con;
cmd = new MySqlCommand...

最后,代码语句是这样的:

con.ConnectionString = Properties.Settings.Default.sampledb_it11ConnectionString;
con.Open();

MySqlCommand cmd = new MySqlCommand("delete tbl_user where username=@un,", con);
cmd.Connection = con;
cmd.Parameters.AddWithValue("@un", TXTUN.Text);
cmd.ExecuteNonQuery();
con.Close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多