我构建了一个MySql数据库和一个C#Windows GUI表单,其中包含文本框字段和一个时间选择器,用于填充名为' job'在我的数据库中。
我在本网站上阅读了一些关于使用预准备语句来防止sql注入攻击的重要性的帖子,我试图在我的代码中使用这个安全功能。 但它不起作用。我是网页设计师,但对编程很新。我在insert命令尝试了不同的代码变体仍然无法工作。我在这个表单上找到的样本涉及使用PHP编写的语句,这不是我正在使用的。
我收到以下错误消息:您的SQL语法中有错误;检查手册或MySQL服务器版本,以获得正确的语法,以便在“工作标题,this.dateTimePickerJobLastUpdated'”附近使用。在第1行
有谁知道我做错了什么以及如何解决这个问题?
这是该表的MySQL语句。
CREATE TABLE作业(
job_code VARCHAR(6) NOT NULL DEFAULT '',
job_title VARCHAR(30) NOT NULL DEFAULT '',
job_last_update DATE NOT NULL,
PRIMARY KEY (job_code)
)ENGINE = InnoDB CHARSET = utf8;
这是我的C#,用于将数据条目从Windows窗体保存到数据库的事件处理程序。
private void btnSaveJobsTable_Click(object sender,EventArgs e) {
String myConnection = @"server=localhost; database=beautyshopdb; username=$$$$; password=$$$$$$";
MySqlConnection Connect = null;
try
{
Connect = new MySqlConnection(myConnection);
Connect.Open(); //open the connection
//This is the mysql command that we will query into the db.
//It uses Prepared statements and the Placeholder is @name.
//Using prepared statements is faster and secure.
String insertQuery = "INSERT INTO beautyshopdb(job) VALUES(@jobCode, @)jobTitle, @lastUpdated)";
MySqlCommand cmdInsertJobsToDataBase = new MySqlCommand(insertQuery, Connect);
cmdInsertJobsToDataBase.Prepare();
//we will bound a value to the placeholder
cmdInsertJobsToDataBase.Parameters.AddWithValue("@jobCode", "this.txtEnterJobCode.Text");
cmdInsertJobsToDataBase.Parameters.AddWithValue("@jobTitle", "this.txtEnterJobTitle.Text");
cmdInsertJobsToDataBase.Parameters.AddWithValue("@lastUpdated", "this.dateTimePickerJobLastUpdated");
cmdInsertJobsToDataBase.ExecuteNonQuery(); //execute the mysql command
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (Connect != null)
{
Connect.Close(); //close the connection
}
}
}
谢谢!
答案 0 :(得分:3)
我不是C#开发人员,但看起来不对,我认为在jobTitle
之前你有一个额外的括号:
String insertQuery = "INSERT INTO beautyshopdb(job) VALUES(@jobCode, @)jobTitle, @lastUpdated)";
此外,您似乎将变量引用放在引号内,就好像它们是字符串常量一样。我希望这些不需要引号。
cmdInsertJobsToDataBase.Parameters.AddWithValue("@jobCode", "this.txtEnterJobCode.Text");
应该是:
cmdInsertJobsToDataBase.Parameters.AddWithValue("@jobCode", this.txtEnterJobCode.Text);