各位老师好:)
感谢大家提供一些解决问题的思路.
.报一个异常:在将 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});
}
where id in('{0}') in 后面不要加单引号
string.Format("update UserTask set IsViewByState=1 where id in({0})",strid);
感谢老师:)
这样写是直接拼接的,可以用参数化么
@Frank铭: 我不太明白你指的参数化是在哪里, 总之你程序的异常就是那个单引号引起的,在sql中没法把非数字的string转成int,至于如何改写成通用的,你可以自己尝试
@Zery:
谢谢您的提示,我的意思是类型SQl的防注入,一般写成SqlParameter[],
我在查查Linq的语法,
再次感谢您,这么晚还在回答问题:)
@Frank铭: 不知道你用的是 Linq to Sql 还是EF 如果是这两种就不用再写sql语句了直接用 Linq to Entity的语法就是操作Entity了 ,你现在的做法还是类似于ADO.NET
@Zery: 嗯,谢谢您了:)
@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();
}
恩恩,是的,上面的朋友已经说了,数据库的参数既然是使用字符串拼接,就直接将数据用字符串表示就可以了,在SQL语句中字符串是用单引号''表示的,如果是数字,就不用加这个单引号!