gpt4 book ai didi

c# - 使用准备好的语句和占位符的 MySQL 插入命令不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:31 24 4
gpt4 key购买 nike

我构建了一个 MySql 数据库和一个 C# Windows GUI 表单,以使用文本框字段和一个时间日期选择器来填充我的数据库中名为“job”的表。

我在这个网站上阅读了一些关于使用准备好的语句来防止 sql 注入(inject)攻击的重要性的帖子,并且我尝试在我的代码中使用这个安全特性。但是它不起作用。我是一名网页设计师,但对编程还很陌生。我在插入命令中尝试了不同的代码变体,但仍然无法正常工作。我在此表单上找到的示例涉及使用 PHP 准备好的语句,这不是我正在使用的。

我收到以下错误消息:您的 SQL 语法有误;检查手册或您的 MySQL 服务器版本以了解在第 1 行的 'jobTitle, this.dateTimePickerJobLastUpdated')' 附近使用的正确语法

有谁知道我做错了什么以及我该如何解决这个问题?

这是表的 MySQL 语句。

创建表作业(

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
}
}

谢谢!

最佳答案

我不是 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);

关于c# - 使用准备好的语句和占位符的 MySQL 插入命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23617665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com