C# 在LIKE语句中插入参数化值

C# 在LIKE语句中插入参数化值,c#,mysql,.net,mono,C#,Mysql,.net,Mono,我有一个方法可以更新mysql数据库中的记录,只要使用以下字符串,查询就可以很好地工作: string query = @"UPDATE Batches SET `State`=@State, `PostDocCount`=@PostDocCount WHERE `FilePath` LIKE '%MYDIRECTORYSTRING%'"; 虽然如果我用参数化查询替换MYDIRECTORYSTRING,例如: string query = @"UPDATE Batches SET `State

我有一个方法可以更新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。所以我相信这是一个语法问题?(尽管两个查询似乎都执行ok…)

以下是我的完整方法:

 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();
        }
    }

在将
dirName
变量分配给
“@dirName”
参数之前,您应该合并%通配符

dirName = "%" + dirName + "%";
然后将sql文本更改为

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

意思它不起作用是因为?您是否使用调试器对代码进行了单步调试,是否出现错误或只是更新没有发生?在后一种情况下,是否检查用作dirName的变量是否包含有效的搜索值?