使用win表单更新mysql数据库,总是会出现奇怪的错误消息

本文关键字:消息 错误 更新 表单 win mysql 数据库 使用 | 更新日期: 2023-09-27 18:21:48

在我的winforms应用程序中,我想使用表单更新数据库值。我设法创建了除此之外的所有其他部分。当我试图更新数据库时,它给了我一些奇怪的sql错误。我不知道我的代码出了什么问题

它向我显示了类似的错误

您的sql语法中有一个错误,请检查与您的mysql服务器版本对应的手册

这是我用来更新数据库的代码。有人能帮我检查一下这个代码吗?

 private void button1_Click(object sender, EventArgs e)
    {

        string constring = string.Format("datasource='{0}';username=***************;port=3306;password=**********;Connect Timeout=20000;Command Timeout=28800", serverip.Text);
        string Query = "update wartif.userdata set (citrixpass= '" + this.citrix_pass_box.Text + " ', idmpass = '" + this.IDM_pass_box.Text + "' , mortracpass = '" + this.mortrac_pass_box.Text + "' , detpass = '" + this.DET_pass_box.Text + "' where username = '" + this.Pwloggeninaslable.Text + "' ;";   
        MySqlConnection conwaqDatabase = new MySqlConnection(constring);
        MySqlCommand cmdwaqDatabase = new MySqlCommand(Query, conwaqDatabase);
        MySqlDataReader myreader;
        try
        {
            conwaqDatabase.Open();
            myreader = cmdwaqDatabase.ExecuteReader();
            while (myreader.Read()) { }
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }


    }

使用win表单更新mysql数据库,总是会出现奇怪的错误消息

您在SET子句之前打开了一个括号(不需要),但忘记在末尾关闭它

但是,让我向您展示如何编写此代码以避免sql注入和解析问题

string constring = .....;
string Query = @"update wartif.userdata set citrixpass=@ctx, idmpass = @idm, 
                 mortracpass = @mtc, detpass = @det where username = @usr;";   
using(MySqlConnection conwaqDatabase = new MySqlConnection(constring))
using(MySqlCommand cmdwaqDatabase = new MySqlCommand(Query, conwaqDatabase))
{
    try
    {
        conwaqDatabase.Open();
        cmdwaqDatabase.Parameters.AddWithValue("@ctx", this.citrix_pass_box.Text);
        cmdwaqDatabase.Parameters.AddWithValue("@idm", this.IDM_pass_box.Text);
        cmdwaqDatabase.Parameters.AddWithValue("@mtc", this.mortrac_pass_box.Text);
        cmdwaqDatabase.Parameters.AddWithValue("@det", this.DET_pass_box.Text);
        cmdwaqDatabase.Parameters.AddWithValue("@usr", this.Pwloggeninaslable.Text);
        int rowsUpdated = cmdwaqDatabase.ExecuteNonQuery();
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }

这样,您就不必担心恶意用户试图通过Sql注入攻击破坏您的代码,您的查询字符串更具可读性,也不必担心传递包含单引号或正确格式化日期和小数的字符串