首页 新闻 会员 周边 捐助

关于Linq中使用 _context.ExecuteCommand的异常

0
悬赏园豆:5 [已解决问题] 解决于 2013-12-24 20:02

各位老师好:)

   感谢大家提供一些解决问题的思路.

  

.报一个异常:在将 varchar 值 '@p0' 转换成数据类型 int 时失败。

.

public int UpdateMultipleByIsViewId(string strJoinArrByid)
{
   strid = Request["idbyIsViewState"];//假设已校验不为空 "1,5"
     string strSql = "update UserTask set IsViewByState=1 where id in('{0}')";
         return _context.ExecuteCommand(strSql,new object[]{strJoinArrByid});
}

Frank铭的主页 Frank铭 | 初学一级 | 园豆:8
提问于:2013-12-21 20:34
< >
分享
最佳答案
1

where id in('{0}') in 后面不要加单引号

string.Format("update UserTask set IsViewByState=1 where id in({0})",strid);

收获园豆:5
Zery | 大侠五级 |园豆:6151 | 2013-12-21 21:57

感谢老师:)

  这样写是直接拼接的,可以用参数化么

Frank铭 | 园豆:8 (初学一级) | 2013-12-21 22:38

@Frank铭: 我不太明白你指的参数化是在哪里, 总之你程序的异常就是那个单引号引起的,在sql中没法把非数字的string转成int,至于如何改写成通用的,你可以自己尝试

Zery | 园豆:6151 (大侠五级) | 2013-12-21 23:11

@Zery: 

谢谢您的提示,我的意思是类型SQl的防注入,一般写成SqlParameter[],

我在查查Linq的语法,

再次感谢您,这么晚还在回答问题:)

Frank铭 | 园豆:8 (初学一级) | 2013-12-21 23:17

@Frank铭: 不知道你用的是 Linq to  Sql  还是EF 如果是这两种就不用再写sql语句了直接用 Linq to Entity的语法就是操作Entity了 ,你现在的做法还是类似于ADO.NET 

Zery | 园豆:6151 (大侠五级) | 2013-12-21 23:30

@Zery: 嗯,谢谢您了:)

Frank铭 | 园豆:8 (初学一级) | 2013-12-21 23:31

@Zery:老师您好:)

感谢您的 提示,尝试完成了一句Update in ()    但效率没有ADO.NET高...

//多条更新, 

public void UpdateMultipleByIsViewId(string strJoinArrByid)
{
string[] statesId = strJoinArrByid.Split(','); //"4,5"

var query = from c in _context.GetTable<Task>() where statesId.Contains(c.ID.ToString()) select c;
foreach (var item in query)
{
item.IsViewByState = 1;
}
_context.SubmitChanges();


}

 

Frank铭 | 园豆:8 (初学一级) | 2013-12-24 20:02
其他回答(1)
0

恩恩,是的,上面的朋友已经说了,数据库的参数既然是使用字符串拼接,就直接将数据用字符串表示就可以了,在SQL语句中字符串是用单引号''表示的,如果是数字,就不用加这个单引号!

狄拉克之海 | 园豆:202 (菜鸟二级) | 2013-12-22 17:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册