我正在尝试使用 foreach 循环来更新 mysql 数据库中的每个复选框。
这就是我所拥有的:
string Query = "update agenda.exercises set @checkboxname='1' where Date='" + currentDate + "';";
使用 cmd 参数:MyCommand2.Parameters.AddWithValue("@checkboxname", isTenured);
当我删除命令参数并将其转换为普通文本时,它就可以工作。当我尝试使用命令参数作为文本时,它不起作用。
这是我的完整代码:
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
作为列名称。
您可以在不带参数的情况下将列名称放入查询中。但一定要使用 SqlParameter
来传递值,即使是硬编码值(例如 true
)
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查询),我将为每个复选框创建自己的方法。
关于带有 mySQL 命令参数的 C# Foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38718495/