设为首页 加入收藏

TOP

LINQ to SQL:如何直接执行SQL语句(二)
2014-11-24 02:49:29 来源: 作者: 【 】 浏览:1
Tags:LINQ SQL: 如何 直接 执行 SQL 语句
tName
  运行的时候,直接抛出异常,提示“Anders”附近有语法错误。毫无疑问,它执行的sql语句:
  UPDATE Person SET FirstName=''Anders'' WHERE Id=10 是不能通过的,同时证明了string.format函数不能有效防止sql注入。
  (2)、直接通过linq方法的参数传递,结果如何呢?
  改进(1)的传参方法:
  ///
  /// 直接执行sql语句 根据用户Id更新FirstName
  ///

  /// 用户Id
  /// 更新后的FirstName
  /// public int ModifyNameById(int id, string destName)
  {
  //string strSql = string.Format("UPDATE Person SET FirstName='{0}' WHERE Id={1}", destName, id);//这么拼接有风险
  //int result = dataContext.ExecuteCommand(strSql);
  string strSql = "UPDATE Person SET FirstName={0} WHERE Id={1}";
  int result = dataContext.ExecuteCommand(strSql, new object[] { destName, id });
  Console.WriteLine();
  Console.WriteLine("affect num:{0}", result);
  return result;
  }
  再次通过如下的方式调用:
  int result = ServiceFactory.CreatePersonService().ModifyNameById(10, "'Anders'");//更新id为10的人的FirstName 这一次运行正常吗?经测试,真的真的是真的正常,终于可以长松一口气了。查看数据库,Id为10的那一条记录的FirstName结果改变成了“'Anders'”(带单引号),明白ADO.NET工作原理的都知道这个一点也不神奇,不是吗?
  对比(1)和(2),我们发现还是用linq2sql的源生方法传参比较好,通过拼接sql应该尽量避免。
  到这里,可能你会认为上面1、2、3全是废话,知道怎么用不就行了嘛?!其实很长一部分时间我也是这么想这么做的。工作久了,早就习惯了不求甚解,现在看书,看园子里高手的博客,多多少少会有点反思。
  4、思考
  ADO.NET中比较常用的ExecuteScalar方法,在linq2sql应该怎么实现呢?您尝试使用过了吗?

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQL Server性能调优之执行计划深.. 下一篇T-SQL查询语言(DQL)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

Shell 基本运算符 -
Shell 函数 | 菜鸟教
Linux 常用命令集合
socket 编程如何实现
Python创建简易的Soc