语句如下:    
    public void DeleteSubjectByKm_id(string str_IDS)
        {
            SqlParameter patrameter = new SqlParameter("@km_ids", SqlDbType.VarChar,50);
            patrameter.Value = str_IDS;
            using (SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectString"]))
            {
                try
                {
                    conn.Open();
                    string str_sql = @"delete from edm_t_dm_subject where cast(km_id as varchar(50)) in (@km_ids) ";
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = str_sql;
                    cmd.Parameters.Add(patrameter);
                    cmd.ExecuteNonQuery();
                    conn.Close();
                }
                catch (Exception ex)
                {
                }
            }
        }

解决方案 »

  1.   

    你用了try,当然没异常了,
    catch (Exception ex) 
                    { 
    msgbox(ex.message)
                    } 
    先看看有没有报错
      

  2.   

    你看一下@km_ids中是否有null值,如有,会不起作用的.
    建议用JOIN及子查询来做
      

  3.   

    用了,没有报错。用不带参数的SQl语句就没有问题。
    好像用带参数的话,in里面的参数识别不了。
      

  4.   

    SqlParameter patrameter = new SqlParameter("@km_ids", SqlDbType.VarChar,50); 
    where cast(km_id as varchar(50)) in (@km_ids)
    ---------
    这种写法是错误的...这里不能用参数传...要么拼字符串要么用一个SP接收此参数再用exec执行...
      

  5.   

    试试看select * from edm_t_dm_subject where cast(km_id as varchar(50)) in (@km_ids)
    估计你这个条件查出来是空的
      

  6.   

    patrameter.Value = “‘” +str_IDS +“’”; 
      

  7.   

    是英文逗号分隔的,可能vrhero的说法是对的,我试下
      

  8.   

    declare @km_ids varchar(50)
    set @km_ids = '6525,6535,6529'
    select * from edm_t_dm_subject where cast(km_id as varchar(50)) in (@km_ids) 
    是空的?
    这是怎么回事,我对这个技术点不太清楚,为什么不行?
      

  9.   

    select * from edm_t_dm_subject where cast(km_id as varchar(50)) in (@km_ids) 
    为什么要转换成字符串啊。select * from edm_t_dm_subject where km_id in (@km_ids) 
      

  10.   

    debug,将SQL字符串拿出来到查询分析器中试试.
      

  11.   


    set @km_ids = ‘'6525','6535',6529'’ 要用这种方式 隔起来的 你看看帮助 in的用法
      

  12.   

    如果没有抛异常,应该是你的SQL语句有问题
      

  13.   

    select * from edm_t_dm_subject where km_id in (1,2,3) select * from edm_t_dm_subject where km_id in (@km_ids) 
    @km_ids这个参数如何表示 1,2,3 ? 传 '1,2,3'进去明显是错误的select * from edm_t_dm_subject where km_id in (@km_ids1,@km_ids2,@km_ids3)
    @km_ids1 传1
    @km_ids2 传2
    @km_ids3 传3
    正确楼主想要实现功能,还需另寻它法。
      

  14.   

    declare @km_ids varchar(50) 
    set @km_ids = '6525,6535,6529' 
    exec "select * from edm_t_dm_subject where cast(km_id as varchar(50)) in ("+@km_ids+")"要这样才行...语法问题...
      

  15.   

    string str_sql = "delete from edm_t_dm_subject where cast(km_id as varchar(50)) in ("+km_ids+) ";
    其中,km_ids="'a','b','c'";