c# - 使用 Windows 窗体更新 mysql 数据库总是给出奇怪的错误消息

标签 c# mysql winforms

在我的 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 注入(inject)和解析问题

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 Injection 破坏您的代码攻击,您的查询字符串更具可读性,您无需担心传递包含单引号或正确格式化日期和小数的字符串

关于c# - 使用 Windows 窗体更新 mysql 数据库总是给出奇怪的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25824927/

相关文章:

c# - 方法 'InitializeComponent'中的代码是设计者生成的,不应手动修改

c# - 如何使用 Entity Framework 6 动态连接到不同的数据库?

mysql - 需要建立一个 queerly groupby

php - MYSQL Joomla 数据库调用无法正常运行

c# - 任务调度程序中的手动线程与 Parallel.Foreach

c# - 如何为 XML 创建 XPath?

mysql - rewritebatchedStatements 在 MySQL 内部做什么?

c# - 在不退出整个应用程序的情况下关闭 Windows 窗体

c# - 哪里点razor文件夹 "_framework"和 "_content"?

c# - 是否建议为所有 C# 枚举添加后缀 "Enum"以避免命名冲突?