LINQ to SQL:如何直接执行SQL语句

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 04:28 点击:

  1、ExecuteQuery方法
  看命名,我们很容易联想到ADO.NET里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该“所思非所得”。下面通过一个简单方法,验证我们的猜想(数据库设计可以参考这一篇):
  ///
  <summary>
  /// 直接执行sql语句,获取总人数
  /// </summary>
  /// <returns></returns>
  public int GetTotalCount()
  {
  string strSql = "SELECT COUNT(0) FROM Person(NOLOCK)";
  var query = dataContext.ExecuteQuery<int>(strSql);
  int result = query.First<int>();
  Console.WriteLine();
  Console.WriteLine("total count:{0}", result);
  return result;
  }
  调试的时候,通过IntelliTrace跟踪到:
  毫无疑问,上面的图片说明最初的想法是不正确的,”ADO.NET:执行Reader…”云云,让我们更加坚信它实际执行的应该是ExecuteReader方法。当然最简单的方法是直接查看它的方法说明:
  // 摘要:
  //     直接对数据库执行 SQL 查询并返回对象。
  //
  // 参数:
  //   query:
  //     要执行的 SQL 查询。
  //
  //   parameters:
  //     要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果某参数为
  //     null,则该参数会转换为 DBNull.Value。
  //
  // 类型参数:
  //   TResult:
  //     返回的集合中的元素的类型。
  //
  // 返回结果:
  //
  由查询返回的对象的集合。
  public IEnumerable<TResult> ExecuteQuery<TResult>(string query, params object[] parameters); ExecuteQuery
  方法还有一个非泛型方法:
  //
  // 摘要:
  //     直接对数据库执行 SQL 查询。
  //
  // 参数:
  //   elementType:
  //
  要返回的 System.Collections.Generic.IEnumerable<T> 的类型。使查询结果中的列与对象中的字段或属性相匹配的算法如下所示:如果字段或属性映射到特定列名称,则结果集中应包含该列名称。如果未映射字段或属性,则结果集中应包含其名称与该字段或属性相同的列。通过先查找区分大小写的匹配来执行比较。如果未找到匹配项,则会继续搜索不区分大小写的匹配项。如果同时满足下列所有条件,则该查询应当返回(除延迟加载的对象外的)对象的所有跟踪的字段和属性:T
  //     是由 System.Data.Linq.DataContext 显式跟踪的实体。System.Data.Linq.DataContext.ObjectTrackingEnabled
  //     为 true。实体具有主键。否则会引发异常。
  //
  //   query:
  //     要执行的 SQL 查询。
  //
  //   parameters:
  //     要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果某参数为
  //     null,则该参数会转换为 DBNull.Value。
  //
  // 返回结果:
  //
  由查询返回的对象的 System.Collections.Generic.IEnumerable<T> 集合。
  public IEnumerable ExecuteQuery(Type elementType, string query, params object[] parameters);
  看它的参数需要多传递一个elementType,明显不如泛型方法简洁。

2、ExecuteCommand方法
  同样道理,这个方法立刻让我们联想到(世界没有联想,生活将会怎样?),联想到,等等,不知联想到什么。然后我们看一下方法使用说明:
  //
  // 摘要:
  //     直接对数据库执行 SQL 命令。
  //
  // 参数:
  //   command:
  //     要执行的 SQL 命令。
  //
  //   parameters:
  //   &nb

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • sql常见面试题
      • SQL SERVER 2005性能之跟踪
      • SQL编程(一)
      • LINUX上RMAN自动备份脚本
      • sql server面试题
      • 如何将多个SQL查询统计结果一次显示出来
      • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
      • sql server 列转行
      • SQL小技巧系列 --- 行转列合并
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1