将参数从文本框传递到 sql 语句字符串 - 单引号(')杀死我

P01*_*107 1 c# mysql syntax wpf

将文本添加到 cpr_txtbx、name_txtbx 和 address_txtbx 后,我将它们转换为要在语句字符串中使用的参数。我正在使用的 MySQL 服务器需要语法:“INSERT INTO people (type, cpr, name, address)” VALUES('cpr', 'name', 'address')"(是的,单引号),我是扯掉我的头发试图找出这里的语法。

我的按钮现在看起来像这样(我知道这是错误的):

        private void add_btn_Click(object sender, RoutedEventArgs e)
    {
        string statement = "INSERT INTO people (type, cpr, name, address)" +
            "VALUES('citizen', ':cpr', ':name', ':address')";
        this.AUD(statement, 0);
        add_btn.IsEnabled = false;
        edit_btn.IsEnabled = true;
        delete_btn.IsEnabled = true;
    }
Run Code Online (Sandbox Code Playgroud)

澳元是:

        private void AUD(string statement, int state)
    {
        string msg = "";
        MySqlCommand cmd = conn.CreateCommand();
        cmd.CommandText = statement;
        cmd.CommandType = CommandType.Text;

        switch (state)
        {
            case 0:
                msg = "Borger tilføjet.";
                cmd.Parameters.Add("cpr", MySqlDbType.Text, 10).Value = cpr_txtbx.Text;
                cmd.Parameters.Add("name", MySqlDbType.Text).Value = name_txtbx.Text;
                cmd.Parameters.Add("address", MySqlDbType.Text).Value = address_txtbx.Text;
                break;
            case 1:
                msg = "Borger modificeret.";
                cmd.Parameters.Add("address", MySqlDbType.Text).Value = address_txtbx.Text;
                break;
            case 2:
                msg = "Borger slettet.";
                cmd.Parameters.Add("cpr", MySqlDbType.Text, 10).Value = cpr_txtbx.Text;
                break;
        }
        try
        {
            int n = cmd.ExecuteNonQuery();
            if ( n > 0 )
            {
                MessageBox.Show(msg);
                this.updateDataGrid();
            }
        }
        catch(MySqlException ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在关注的教程在这里:https : //www.youtube.com/watch?v=NiGsgctfiYM

这是我唯一无法开始工作的事情,因此非常感谢任何帮助:)

Bil*_*win 5

不要将参数占位符放在 SQL 字符串分隔符中。

错误的:

string statement = "INSERT INTO people (type, cpr, name, address)" +
        "VALUES('citizen', ':cpr', ':name', ':address')";
Run Code Online (Sandbox Code Playgroud)

对:

string statement = "INSERT INTO people (type, cpr, name, address)" +
        "VALUES('citizen', :cpr, :name, :address)";
Run Code Online (Sandbox Code Playgroud)

回复您的评论:

我再次查看了您正在使用的视频教程,我看到它显示了 Oracle 语法。请记住,尽管使用标准 SQL 语言,但每个 SQL 数据库品牌都有自己的语法。所以你应该使用你使用的品牌的文档和教程。

我不是 C# 开发人员,所以一开始我没有注意到 MySQL 中查询参数的语法与 Oracle 不同。

https://dev.mysql.com/doc/connector-net/en/connector-net-programming-prepared-preparing.html示出了具有一个示例@作为印记为参数来代替:。所以我假设您可以使用以下语法修复您的代码:

string statement = "INSERT INTO people (type, cpr, name, address)" +
        "VALUES('citizen', @cpr, @name, @address)";
Run Code Online (Sandbox Code Playgroud)

然后稍后添加值:

cmd.Parameters.AddWithValue("@cpr", cpr_txtbx.Text);
cmd.Parameters.AddWithValue("@name", name_txtbx.Text);
cmd.Parameters.AddWithValue("@address", address_txtbx.Text);
Run Code Online (Sandbox Code Playgroud)