带有mySQL命令参数的C#Foreach循环
本文关键字:C#Foreach 循环 参数 mySQL 命令 带有 | 更新日期: 2023-09-27 17:59:47
我正在尝试使用foreach循环来更新mysql数据库中的每个复选框。
这就是我所拥有的:
string Query = "update agenda.exercises set @checkboxname='1' where Date='" + currentDate + "';";
带有cmd参数:MyCommand2.Parameters.AddWithValue("@checkboxname", isTenured);
当我删除命令参数并将其转换为普通文本时,它就可以工作了。当我尝试使用命令param作为文本时,它不起作用。
这是我的完整代码:
foreach (DataColumn dc in allCheckboxes.Columns)
{
MessageBox.Show(dc.ToString());
//var field1 = dtRow[dc].ToString();
string Query = "update agenda.exercises set @checkboxname='1' where Date='" + currentDate + "';";
MySqlConnection MyConn2 = new MySqlConnection(MyConnection2);
MySqlCommand MyCommand2 = new MySqlCommand(Query, MyConn2);
MyCommand2.Parameters.AddWithValue("@checkboxname", dc.ToString());
MySqlDataReader MyReader2;
MyConn2.Open();
MyReader2 = MyCommand2.ExecuteReader();
while (MyReader2.Read())
{
}
MyConn2.Close();
}
有人能告诉我我做错了什么吗?
不能将SqlParameter
用于列名
您可以在不带参数的情况下将列名放入查询中。但对于传递的值,即使是硬编码的值(例如true
),也一定要使用SqlParameter
foreach (DataColumn dc in allCheckboxes.Columns)
{
string Query = $"UPDATE agenda.exercises SET {dc.ToString()} = @True
WHERE Date = @CurrentDate;";
using (MySqlConnection MyConn2 = new MySqlConnection(MyConnection2))
{
using (MySqlCommand MyCommand2 = new MySqlCommand(Query, MyConn2))
{
MyCommand2.Parameters.AddWithValue("@True ", true);
MyCommand2.Parameters.AddWithValue("@CurrentDate", currentDate);
MyConn2.Open();
MyCommand2.ExecuteNonQuery();
}
}
}
就我个人而言,我不喜欢这种方法(动态创建sql查询),我会为每个复选框创建自己的方法。
您将列名作为参数,但这将不起作用,您必须将值放在参数中。
类似这样的东西:
foreach (DataColumn col in allCheckboxes.Columns)
{
string Query = "update agenda.exercises set " + col.ToString() + " = @value where Date = @CurrentDate;";
using (MySqlConnection MyConn2 = new MySqlConnection(MyConnection2))
{
using (MySqlCommand MyCommand2 = new MySqlCommand(Query, MyConn2))
{
MyCommand2.Parameters.AddWithValue("@Value ", true);
MyCommand2.Parameters.AddWithValue("@CurrentDate", currentDate);
MyConn2.Open();
MyCommand2.ExecuteNonQuery();
}
}
}