Entity Framework 执行SQL问题,ExecuteSqlCommand,in语法如何传参数呢?

不懂必须要问 2013-05-18 07:32:11


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}})

//也不行,怎么传参数呢?
...全文
2185 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
u011010407 2015-10-06
  • 打赏
  • 举报
回复

using (EFContext db = new EFContext())
            {
              SqlParameter s=  new SqlParameter("@aa", SqlDbType.Int,50){Value=1};

              db.Database.ExecuteSqlCommand("update a set a.code=@aa from safety_codeOpt b inner join safety_order a on a.big=b.big", s);
}
已测试。
  • 打赏
  • 举报
回复
如果遇到难题,用你快捷的ado.net来查询结果对象。
charles_y 2013-07-21
  • 打赏
  • 举报
回复
直接写不就行了 db.ExecuteSqlCommand("UPDATE obj_user SET user_xxx={0} WHERE user_id IN {1};",userxxx,id); 其中userxxx和id是两个变量
不懂必须要问 2013-07-21
  • 打赏
  • 举报
回复
太复杂了!在语句上无法实现?一定要拼接做?那就有点悲剧了
geass 2013-07-07
  • 打赏
  • 举报
回复
先把 id 拼接成 1,2,3 字符 存储过程用 charindex

CHARINDEX( ',' + CAST(id as varchar) + ',',   ',' + @inStr + ',') > 0
不懂必须要问 2013-07-07
  • 打赏
  • 举报
回复
无确定答案么?
number1170196649 2013-05-18
  • 打赏
  • 举报
回复
问题很高深,我也想知道。
熊猫无敌 2013-05-18
  • 打赏
  • 举报
回复
楼主应该看下源代码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);
	}
EnForGrass 2013-05-18
  • 打赏
  • 举报
回复
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)
szjarvis 2013-05-18
  • 打赏
  • 举报
回复
收藏学习……

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧