带有 mySQL 命令参数的 C# Foreach 循环

标签 c# mysql

我正在尝试使用 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/

相关文章:

c# - 如何在客户机上安装 Windows 应用程序和 SQL 服务器?

C#检查订单号是否已经存在

c# - 从 TableView 打开 View

c# - ASP.NET 5、MVC 6、Web API -> ModelState.IsValid 始终返回 true

php - 如何在该特定页面上选择导航菜单?

python - MySQL-解析字段

c# - 从 C# 转换为 VB.NET 的代码中出现奇怪错误

mysql - 在 SQL 中获取关于日期的平均值

php - DB::Table 和 DB::Select 之间的区别

mysql - Sequelize - 嵌套 'include' 语句中的 Where 子句确实在 Node 中正确返回结果