代码如下:
         private void GetData(string itm)
        {
            SqlCommand tmpSQL = new SqlCommand("select ixkit,ixitm from F01002 where ixkit in ( @ixkit )", sqlconstr);
            tmpSQL.Parameters.Add("@ixkit", SqlDbType.Decimal).Value = @itm;
            SqlDataReader sdr = tmpSQL.ExecuteReader();
            while(sdr.Read()){ ...}
        }问题:
    说明:字段IXKIT是SqlDbType.Decimal类型字段。
    另:请不要告诉我用"select ixkit,ixitm from F01002 where ixkit in (" + itm + ")"的方法,这个能行,我是知道的,关键是为什么用以下方法就不行了?
  当调用此过程时,如果参数是单一值不会有问题,否则部有问题,如下:
  GetData("1") ---- OK
    GetData("1,2,3") --- Error 

解决方案 »

  1.   

    ("select ixkit,ixitm from F01002 where ixkit in ( @ixkit )"
    這是一個字符串,sql server 會把@ixkit 也作為一個字符串,面不是參數一定要用
    "select ixkit,ixitm from F01002 where ixkit in (" + @ixkit + ")"
    把@ixkit的值替換出來才行.
      

  2.   

    为什么字段IXKIT是SqlDbType.Decimal类型字段。?????????????
    nvrchar类型的不行吗?
      

  3.   

    使用参数就不能使用传 "1, 2, 3" 这样的值了。使用
    "select ixkit,ixitm from F01002 where ixkit in (" + itm + ")"
    这样其他是组成一条正确的SQL语句后在执行的。而你使用参数
    "select ixkit,ixitm from F01002 where ixkit in ( @ixkit )"
    这里的 @ixkit 是当前整个对象来看待,而不是像前面一种方法一样直接把 @ixkit 替换掉。
      

  4.   

    string sql = @"Declare @i numeric(2) set @i = 0
    select @i=count(*) from Dv_Board where ParentID = ((select ParentID from Dv_Board where BoardID = @board_id))
    if(@i>1)
    begin
    delete from Dv_Board WHERE BoardID = @board_id
    end
    else
    begin
    delete from Dv_Board WHERE BoardID = (select ParentID from Dv_Board where BoardID =@board_id)
    delete from Dv_Board WHERE BoardID = @board_id
    end";
    return DataAccess.DeleteData1(sql,CommandType.Text,out msg,DataAccess.GetParameter("@board_id",board_id));
    我这么用时没有错误
      

  5.   

    tmpSQL.Parameters.Add("@ixkit", SqlDbType.Decimal).Value = @itm;
    tmpSQL是DECIMAL类型,参数"1,2,3"呢好像不是DECIMAL类型吧
      

  6.   

    做一下处理:
    如果是decimal的话那么就构造成in(2,3,5)这个格式,或者是in('2','3','5')这个格式。如果做到通用,最好构造成后一种做法。
    因为Sql Server中的int,bit,char,varchar,decimal,float,..都可以接受'x'这种格式。
      

  7.   

    將 "@ixkit" 改為 @ixkit
      

  8.   

    private void GetData(string itm)
    {
         SqlCommand tmpSQL = new SqlCommand("select ixkit,ixitm from F01002 where ixkit in ( @ixkit )", sqlconstr);
         tmpSQL.Parameters.Add(@ixkit, SqlDbType.Decimal).Value = @itm;
         SqlDataReader sdr = tmpSQL.ExecuteReader();
         while(sdr.Read()){ ...}
    }試試這樣
      

  9.   

    建议尝试:
    int len=itm.Length;
    SqlCommand tmpSQL = new SqlCommand("select ixkit,ixitm from F01002 where ixkit in ( @ixkit )", sqlconstr);
                tmpSQL.Parameters.Add("@ixkit", SqlDbType.Char,len).Value = @itm;
                SqlDataReader sdr = tmpSQL.ExecuteReader();
                while(sdr.Read()){ ...}
    或者
    itm=itm.Replace("," , "','");
    itm="'" + itm + "'";
    int len=itm.Length;
    SqlCommand tmpSQL = new SqlCommand("select ixkit,ixitm from F01002 where ixkit in ( @ixkit )", sqlconstr);
                tmpSQL.Parameters.Add("@ixkit", SqlDbType.Char,len).Value = @itm;
                SqlDataReader sdr = tmpSQL.ExecuteReader();
                while(sdr.Read()){ ...}
      

  10.   

    很感谢有这么多人相助。
    也很遗憾还是没有找到真正解决办法。
    谁能告诉我用[参数]的方式,将不连续的值传入SqlCommand呢?
    也就是说怎样用[参数]的方式,实现SQL的Where in功能呢?
      

  11.   

    为什么不用字符的参数,我做过类似的,用的是char
      

  12.   

    其实用CommandParser动态创建参数不就OK了……例如我的数据库帮助器可以这样写:
    dbUtility.ExecuteData( "select ixkit,ixitm from F01002 where ixkit in ( {...} )", 1, 2, 3 );http://community.csdn.net/Expert/topic/4583/4583043.xml?temp=.7616236