C# 使用win表单更新mysql数据库时,始终会显示奇怪的错误消息

C# 使用win表单更新mysql数据库时,始终会显示奇怪的错误消息,c#,mysql,winforms,C#,Mysql,Winforms,在我的winforms应用程序中,我想使用表单更新数据库值。我成功地创建了除此之外的所有其他部件并开始工作。当我尝试更新数据库时,它给了我一些奇怪的sql错误。我不知道我的代码出了什么问题 它向我显示了这样的错误 sql语法有错误,请检查与mysql服务器版本对应的手册 这是我用来更新数据库的代码。有人能帮我检查一下这个代码吗 private void button1_Click(object sender, EventArgs e) { string constr

在我的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);
        }





    }

在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);
     }
 }

这样,您就不必担心恶意用户试图通过攻击破坏您的代码,您的查询字符串更具可读性,您也不必担心传递包含单引号的字符串或正确设置日期和小数的格式,只要在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);
     }
 }

这样,您就不必担心恶意用户试图通过攻击破坏您的代码,您的查询字符串更具可读性,您也不必担心传递包含单引号的字符串或正确设置日期和小数的格式,只要在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);
     }
 }

这样,您就不必担心恶意用户试图通过攻击破坏您的代码,您的查询字符串更具可读性,您也不必担心传递包含单引号的字符串或正确设置日期和小数的格式,只要在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);
     }
 }
这样,您就不必担心恶意用户试图通过攻击破坏您的代码,您的查询字符串更具可读性,您也不必担心传递包含单引号的字符串或正确设置日期和小数的格式