string strSQL = @"select count(ID) from xx_tb C01 in :strC01Type ";
如这个sql语句,公司用的subsonic,用 AddParameter(":strC01Type ", strC01Type , DbType.String); 
添加参数值后,会在in后面默认会加单引号和括号处理,不知道Oracle的in查询有bug,还是什么问题。
请教各位高手,Oracle的in查询

解决方案 »

  1.   

    错误提示是什么?SQL> with t as(
      2       select 1 col_1,'a' col_2,'this is a' col_3 from dual union all
      3       select 2,'d','it''s d' from dual union all
      4       select 1,'e','e,intenert' from dual union all
      5       select 4,'f','f,firefox' from dual)
      6  select * from t
      7  where col_1 in (1,2)
      8  order by col_1;     COL_1 COL_2 COL_3
    ---------- ----- ----------
             1 a     this is a
             1 e     e,intenert
             2 d     it's dSQL> 
    SQL> with t as(
      2       select 1 col_1,'a' col_2,'this is a' col_3 from dual union all
      3       select 2,'d','it''s d' from dual union all
      4       select 1,'e','e,intenert' from dual union all
      5       select 4,'f','f,firefox' from dual)
      6  select * from t
      7  where col_2 in ('a','f')
      8  order by col_1;     COL_1 COL_2 COL_3
    ---------- ----- ----------
             1 a     this is a
             4 f     f,firefox
      

  2.   

    还有,in后面的参数不是写死的,不能拼接把参数拼在in后面
      

  3.   

    要是拼接的话,你何不将在in后面的字符赋值给一个string类型变量,
    用方法 AddParameter添加进去。
      

  4.   

    用Addparameter的时候,你把strC01Type这个参数拼接成“('1','2','3')”这种格式即可,我是屡试不爽。
      

  5.   

    trC01Type是字符串变量吧?先将这个变量修改一下,改成in后面要的格式,然后在传到sql语句里。否则就得用储存过程。
      

  6.   

    你说的不就是拼接,你sql没处理好,存储过程一样的没用啊
      

  7.   

    解决方法:可以把你用逗号分隔的字符,转换为数组的形式,如:"123,345,678,90"
    转换成字符数据string[] str={"123","345",...};然后根据数据的长度添加参数进行判断!