在我的 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/