【问题标题】:Insert Parametrised value within a LIKE statement在 LIKE 语句中插入参数化值
【发布时间】:2023-03-19 13:17:01
【问题描述】:

我有一个方法可以更新mysql数据库中的一条记录,当简单地使用如下字符串时查询效果很好:

string query = @"UPDATE Batches SET `State`=@State, `PostDocCount`=@PostDocCount WHERE `FilePath` LIKE '%MYDIRECTORYSTRING%'";

虽然如果我用参数化查询替换 MYDIRECTORYSTRING,例如:

string query = @"UPDATE Batches SET `State`=@State, `PostDocCount`=@PostDocCount WHERE `FilePath` LIKE '%@dirName%'";

它不再有效(记录未更新) - 我也确认了@dirName == MYDIRECTORYSTRING。所以我被引导相信这是一个语法问题? (虽然这两个查询似乎都执行得很好..)

以下是我的完整方法:

 public void UpdateBatch(string postDocCount, string dirName, string state)
        {
        string query = @"UPDATE Batches SET `State`=@State, `PostDocCount`=@PostDocCount WHERE `FilePath` LIKE '%@dirName%'";

        //Open connection
        if (this.OpenConnection() == true)
        {
            //create mysql command
            MySqlCommand cmd = new MySqlCommand();
            //Assign the query using CommandText
            cmd.CommandText = query;
            //Assign the connection using Connection
            cmd.Connection = connection;

            // Parametized queries 
            cmd.Parameters.AddWithValue("@PostDocCount", postDocCount);
            cmd.Parameters.AddWithValue("@State", state);
            cmd.Parameters.AddWithValue("@dirName", dirName);

            //Execute query
            cmd.ExecuteNonQuery();

            //close connection
            this.CloseConnection();
        }
    }

【问题讨论】:

    标签: c# mysql .net mono


    【解决方案1】:

    在将 dirName 变量分配给 "@dirName" 参数之前,您应该加入 % 通配符

    dirName = "%" + dirName + "%";
    

    然后将你的 sql 文本更改为

    string query = @"UPDATE Batches SET `State`=@State, `PostDocCount`=@PostDocCount " + 
                    "WHERE `FilePath` LIKE @dirName";
    

    【讨论】:

    • 意义?它不起作用,因为...?您是否使用调试器单步执行了您的代码,是否出现错误或只是没有更新?在后一种情况下,您是否检查用作 dirName 的变量是否包含有效的搜索值?
    猜你喜欢
    • 2015-06-03
    • 1970-01-01
    • 2015-12-03
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多