如标题所述
表test
字段:ID,Namestring strSql = “select * from test where ID like '%@paramID%‘”;其中@paramID是一个参数,这样子不能够实现模糊匹配啊,查询的结果都是0.请问高手,如何在C#中实现对MySQL 语句的参数进行模糊匹配?

解决方案 »

  1.   

    string strSql = “select * from test where ID like '%@paramID%‘”;
    ->
    string strSql = “select * from test where ID like '%"+@paramID+"%'”;
      

  2.   

    忘了说明一点,我的参数是通过这种方式追加进去的public void search(string strID)
    {
         string strSql = “select * from test where ID like '%@paramID%‘”;
     
         MySqlParameter param = new MySqlParameter("@paramID", strID);     MySqlCommand sqlCmd = new MySqlCommand(strSql);     MySqlDataAdapter dataAdapter = new MySqlDataAdapter(sqlCmd.CommandText, conn);    dataAdapter.SelectCommand.Parameters.Add(param);     DataTable objDT = new DataTable();    dataAdapter.Fill(objDT);}
    大概的写一下,让大家更清楚我的意思。strID是从方法里传进来的。楼上那种写法,应该是paramID是从外面传进来的参数。但是我的paramID是在MySqlParameter里定义的,因为我要用到多个参数,所以要判断一下参数是否为空,不为空的才加进来而最终的参数是通过适配器加到sql语句中的
    dataAdapter.SelectCommand.Parameters.Add(param);
      

  3.   

    我感觉,这样的话可能会用到mysql里面的一个预制语句的东西
    所以建议用存储过程来写
    存储过程中获得你的这个模糊参数例如你的存储过程中语句如下:
    SET @SQLLIKE = x; -- x为存储过程的输入参数,即你的查询参数
    SET @SQL = 'select * from test where ID like \'%?%\'';
    PREPAER S FROM @SQL;
    EXECUTE S USING @SQLLIKE;
    DEALLOCATE PREPARE S;这样的就可以了
      

  4.   

    呃……
    上面有一个我写错了
    sql语句中的倒数第三行
    PREPAER S FROM @SQL;应该是
    PREPARE S FROM @SQL;
    第一个单词写错了。
      

  5.   

    非常感谢,可是小弟存储过程还真是不怎么会写啊?
    而且我这个sql语句是需要动态拼串的,就是说我页面上有多个TextBox,我需要判断他们是否有值,
    然后按照输入的条件去拼那个sql语句,用存储过程可以动态拼吗?
      

  6.   

     string strSql = “select * from test where ID like '%@paramID%‘”;     MySqlParameter param = new MySqlParameter("@paramID", strID); 
     string strSql = “select * from test where ID like @paramID”;     MySqlParameter param = new MySqlParameter("@paramID", “%”+ strID + “%”);