var ids= new List<int>();
                ids.Add(1);
                ids.Add(2);
                db.ExecuteSqlCommand("UPDATE obj_user SET user_xxx={0} WHERE user_id IN {1};", new object[] { "userxxxxx", ids})
//这样不行。db.ExecuteSqlCommand("UPDATE [obj_user] SET user_xxx={0} WHERE user_id IN {1};", new object[] { "A", new int[]{1,2}})//也不行,怎么传参数呢?

解决方案 »

  1.   

    db.ExecuteSqlCommand("UPDATE [obj_user] SET user_xxx={0} WHERE user_id IN {1};", new object[] { "A", new int[]{1,2}})
     我没用过这个方法,你试试下面这样行不行??
    IN拼接成一个字符串
    string user_xxx="";
    int[] userIDs=new int[]{1,2};
    string ids="("+string.Join(",",userIDs.Select(x=>x.ToString()).ToArray())+")";
    db.ExecuteSqlCommand("UPDATE [obj_user] SET user_xxx={0} WHERE user_id IN {1};", user_xxx,ids)
      

  2.   

    楼主应该看下源代码ExecuteSqlCommand内部到底做什么它本质上是
    DbCommand CreateStoreCommand(string commandText, params object[] parameters)把源代码贴上来具体如下,new object[]里每一个object实质上转化为了一个DbParameter
    它的name是object.tostring, value为object楼主有没有想过你的new int[]如果不放在IN后面,如果放别的条件里(因为在sql语句里sqlParameter的位置是可变的)
    ExecuteSqlCommand是无法判断在in 后面它要拼装出 IN (1, 2, 3),注意有小括号,有逗号(建议楼主在自己的demo中把小括号加上去试试),在其它地方要拼出另一种不同的sql形式所以据我看来这是有矛盾的地方,当然我没仔细看SqlCommand如何转化成sql语句的部分,不能100%确定。
    建议楼主直接把 new int转化成合适的string拼到sql里,就像楼上一样(注意楼上最后一句话,ids既然是string了,就不应该用作sqlParameter) if (parameters != null && parameters.Length > 0)
    {
    DbParameter[] array = new DbParameter[parameters.Length];
    if (parameters.All((object p) => p is DbParameter))
    {
    for (int i = 0; i < parameters.Length; i++)
    {
    array[i] = (DbParameter)parameters[i];
    }
    }
    else
    {
    if (parameters.Any((object p) => p is DbParameter))
    {
    throw EntityUtil.InvalidOperation(Strings.ObjectContext_ExecuteCommandWithMixOfDbParameterAndValues);
    }
    string[] array2 = new string[parameters.Length];
    string[] array3 = new string[parameters.Length];
    for (int j = 0; j < parameters.Length; j++)
    {
    array2[j] = string.Format(CultureInfo.InvariantCulture, "p{0}", new object[]
    {
    j
    });
    array[j] = dbCommand.CreateParameter();
    array[j].ParameterName = array2[j];
    array[j].Value = (parameters[j] ?? DBNull.Value);
    array3[j] = "@" + array2[j];
    }
    dbCommand.CommandText = string.Format(CultureInfo.InvariantCulture, dbCommand.CommandText, array3);
    }
    dbCommand.Parameters.AddRange(array);
    }
      

  3.   

    先把 id 拼接成 1,2,3 字符
    存储过程用 charindex CHARINDEX( ',' + CAST(id as varchar) + ',',   ',' + @inStr + ',') > 0
      

  4.   

    直接写不就行了
    db.ExecuteSqlCommand("UPDATE obj_user SET user_xxx={0} WHERE user_id IN {1};",userxxx,id);
    其中userxxx和id是两个变量 
      

  5.   

    如果遇到难题,用你快捷的ado.net来查询结果对象。