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}})//也不行,怎么传参数呢?
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}})//也不行,怎么传参数呢?
我没用过这个方法,你试试下面这样行不行??
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)
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);
}
存储过程用 charindex CHARINDEX( ',' + CAST(id as varchar) + ',', ',' + @inStr + ',') > 0
db.ExecuteSqlCommand("UPDATE obj_user SET user_xxx={0} WHERE user_id IN {1};",userxxx,id);
其中userxxx和id是两个变量