一、直接使用C#操作数据库的类库ADO.NET
ADO.NET使用Connection对象来连接数据库,使用Command或DataAdapter

对象来执行SQL语句,并将执行的结果返回给DataReader或DataAdapter,然后

再使用取得的DataReader或者DataAdapter对象操作数据结果。

二、Entity Framework
Entity Framework 实体框架是微软的一个ORM框架。是支持面向数据的软件开

发应用程序。我一般配合linq和lambda表达式使用。

ORM((Object Relational Mapping对象关系映射)指的是面向对象的对象模型和

关系型数据库的数据结构之间的互相转换。(表实体跟表之间的相互转换)

LINQ查询:当我们使用linq查询时,转到定义会调到Queryable 类, 那么也就是
说,这个类封装了linq所有查询的方法,提供一组用于查询实现 IQueryable<T>

的数据结构的 静态方法。
IQueryable和IList一样,是用于接收一组数据的集合, IQeurable

(IQuerable<T>)不会立即在内存里创建持久数据,只有遍历它(如通过

foreach)、把它转换成List等情况下才会向内存加载数据,它可以实现“延期执

行”,如果当前被加载的实体有关联实体(associations),此关联实体可被接下

来的访问加载。

Ilist-继承顺序如下:
Ilist->ICollection ->IEnumerable
IEnumerable它允许开发人员定义foreach语句功能的实现并支持非泛型方法的简

单的迭代
同样的IQueryable也继承自IEnumerable<T>这一泛型接口

Queryable类提供了扩展的基本查询方法:Where,Select
select提供方法如下:
public static IQueryable<TResult> Select<TSource, TResult>(this

IQueryable<TSource> source, Expression<Func<TSource, TResult>>

selector);
where提供的方法如下:
public static IQueryable<TSource> Where<TSource>(this

IQueryable<TSource> source, Expression<Func<TSource, bool>>

predicate);
public static IQueryable<TSource> Where<TSource>(this

IQueryable<TSource> source, Expression<Func<TSource, int, bool>>

predicate);

Lambda表达式

(1)源起.net的设计者发现在使用匿名方法时,仍旧有一些多余的字母或单词的编码工作

比如delegate关键字于是进一步简化了匿名方法的写法。

(2)使用      
List<int> arr = new List<int>() { 1, 2, 3, 4, 5, 6, 7 };
arr.ForEach(new Action<int>(delegate(int a) { Console.WriteLine

(a); }));
arr.ForEach(new Action<int>(a => Console.WriteLine(a)));
      匿名方法的代码如下:
      delegate(int a) { Console.WriteLine(a); }
      使用lambda表达式的代码如下:
      a => Console.WriteLine(a)
      这里解释一下这个lambda表达式
      <1>
        a是输入参数,编译器可以自动推断出它是什么类型的,
        如果没有输入参数,可以写成这样:
        () => Console.WriteLine("ddd")
      <2>
        =>是lambda操作符
      <3>
        Console.WriteLine(a)是要执行的语句。
        如果是多条语句的话,可以用{}包起来。
        如果需要返回值的话,可以直接写return语句

LINQ
1.查询操作符
  (1)源起
      .net的设计者在类库中定义了一系列的扩展方法
      来方便用户操作集合对象
      这些扩展方法构成了LINQ的查询操作符
    (2)使用
      这一系列的扩展方法,比如:
      Where,Max,Select,Sum,Any,Average,All,Concat等
      都是针对IEnumerable的对象进行扩展的
      也就是说,只要实现了IEnumerable接口,就可以使用这些扩展方法
      来看看这段代码:      
List<int> arr = new List<int>() { 1, 2, 3, 4, 5, 6, 7 };
var result = arr.Where(a => { return a > 3; }).Sum();
Console.WriteLine(result);
Console.ReadKey();
      这段代码中,用到了两个扩展方法。
(3)好处
      上面的代码中
      arr.Where(a => { return a > 3; }).Sum();
      这一句完全可以写成如下代码:
      (from v in arr where v > 3 select v).Sum();
      而且两句代码的执行细节是完全一样的
      大家可以看到,第二句代码更符合语义,更容易读懂
      第二句代码中的where,就是我们要说的查询操作符。
    (4)标准查询操作符说明
      <1>过滤
        Where
        用法:arr.Where(a => { return a > 3; })
        说明:找到集合中满足指定条件的元素
        OfType
        用法:arr.OfType<int>()
        说明:根据指定类型,筛选集合中的元素
      <2>投影
       Select
        用法:arr.Select<int, string>(a => a.ToString());
        说明:将集合中的每个元素投影的新集合中。上例中:新集合是

一个IEnumerable<String>的集合
        SelectMany
        用法:arr.SelectMany<int, string>(a => { return new

List<string>() { "a", a.ToString() }; });
        说明:将序列的每个元素投影到一个序列中,最终把所有的序列

合并
      <3>还有很多查询操作符,请翻MSDN,以后有时间我将另起一篇文

章把这些操作符写全。

2.查询表达式
    (1)源起
      上面我们已经提到,使用查询操作符表示的扩展方法来操作集合;
      虽然已经很方便了,但在可读性和代码的语义来考虑,仍有不足;
      于是就产生了查询表达式的写法。
      虽然这很像SQL语句,但他们却有着本质的不同。
    (2)用法
      from v in arr where v > 3 select v
      这就是一个非常简单的查询表达式
    (3)说明:
      先看一段伪代码:      
      from [type] id in source
      [join [type] id in source on expr equals expr [into

subGroup]]
      [from [type] id in source | let id = expr | where condition]
      [orderby ordering,ordering,ordering...]
      select expr | group expr by key
      [into id query]
      <1>第一行的解释:
        type是可选的,
        id是集合中的一项,
        source是一个集合,
        如果集合中的类型与type指定的类型不同则导致强制类型转化
      <2>第二行的解释:        
        一个查询表达式中可以有0个或多个join子句,
        这里的source可以是一个全新的集合,可以不等于第一句中的

source
        expr可以是一个表达式
        [into subGroup] subGroup是一个中间变量,
        它继承自IGrouping,代表一个分组,也就是说“一对多”里的

“多”
        可以通过这个变量得到这一组包含的对象个数,以及这一组对象

的键
        比如:        
        from c in db.Customers
    join o in db.Orders on c.CustomerID
    equals o.CustomerID into orders
    select new
    {
    c.ContactName,
    OrderCount = orders.Count()
    };
      <3>第三行的解释:     
        一个查询表达式中可以有1个或多个from子句
        一个查询表达式中可以有0个或多个let子句,let子句可以创建一

个临时变量
        比如:        
    from u in users
    let number = Int32.Parse(u.Username.Substring

(u.Username.Length - 1))
    where u.ID < 9 && number % 2 == 0
    select u
        一个查询表达式中可以有0个或多个where子句,where子句可

以指定查询条件
      <4>第四行的解释:
        一个查询表达式可以有0个或多个排序方式
        每个排序方式以逗号分割
      <5>第五行的解释:
        一个查询表达式必须以select或者group by结束
        select后跟要检索的内容
        group by 是对检索的内容进行分组
        比如:        
    from p in db.Products
    group p by p.CategoryID into g
    select new { g.Key, NumProducts = g.Count()};
      <6>第六行的解释:
        最后一个into子句起到的作用是
        将前面语句的结果作为后面语句操作的数据源
        比如:        
    from p in db.Employees
    select new
    {
    LastName = p.LastName,
    TitleOfCourtesy = p.TitleOfCourtesy
    } into EmployeesList
    orderby EmployeesList.TitleOfCourtesy ascending
    select EmployeesList;

.NET访问数据库的两种方式(C#语言)的更多相关文章

  1. Spring框架访问数据库的两种方式的小案例

    1.1 以Xml的方式访问数据库的案例 要以xml的方式访问数据库需要用到JdbcTemplate ,因为 JdbcTemplate(jdbc的模板对象)在Spring 中提供了一个可以操作数据库的对 ...

  2. .Net 中读写Oracle数据库常用两种方式

    .net中连接Oracle 的两种方式:OracleClient,OleDb转载 2015年04月24日 00:00:24 10820.Net 中读写Oracle数据库常用两种方式:OracleCli ...

  3. Android开发之使用sqlite3工具操作数据库的两种方式

    使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/feng ...

  4. Servlet访问路径的两种方式、Servlet生命周期特点、计算服务启动后的访问次数、Get请求、Post请求

    Servlet访问路径的两种方式: 1:注解 即在Servlet里写一个@WebServlet @WebServlet("/myServlet") 2:配置web.xml < ...

  5. JPA访问数据库的几种方式

    JPA访问数据库的几种方式 本文为原创,转载请注明出处:https://www.cnblogs.com/supiaopiao/p/10901793.html 1. Repository 1.1. 通过 ...

  6. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

    参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...

  7. JS中访问对象的两种方式区别

    可以使用下面两种方式访问对象的属性和方法 1.对象名.属性名 对象名.方法名() 2.对象名["属性名"] 对象名["方法名"]() var obj = { n ...

  8. Django框架操作数据库的两种方式

    Django操作数据库的前提操作是成功连接数据库,详情见上篇:https://www.cnblogs.com/kristin/p/10791358.html Django查询数据库的方式一 from ...

  9. Eclipse通过jdbc连接sqlserver2008数据库的两种方式

    数据库登录身份验证方式有两种     其中服务器名称即为安装SQLServer2008的电脑,充当数据库服务器,在笔者这里就是自己的电脑名称. 身份验证方式有两种:windows身份验证和SQLSer ...

随机推荐

  1. Chapter 3. Video Coding Concepts

    本章主要介绍一些有关视频编码的概念 时域模型(Temporal Model) 时域模型的作用是去除帧间冗余.如:将第二帧减去第一帧,得到的剩余信息,其能量会远小于第二帧本身. 基于块的运动估计和补偿 ...

  2. 一个用 js 实现点阵图的编辑器演示

    这是个客户的需求,具体大概是可以在一个 24*8 的点阵图上自由绘制图形,然后数据的存储是按列依次记录,用0和1分别表示是否选中,最终串成一个字符串. 整体需求难度并不复杂,所以在写demo的时候就尽 ...

  3. weblogic 部署问题定位与解决

    weblogic 做为商用中间件在(EJB.jndi 数据源.日志管理.内存管理.资源配置管理...)  是一些开源免费小型容器无法望其项背的. weblogic 最早由 weblogic Inc. ...

  4. 从Android源码的角度分析Binder机制

    欢迎访问我的个人博客,原文链接:http://wensibo.top/2017/07/03/Binder/ ,未经允许不得转载! 前言 大家好,好久不见,距离上篇文章已经有35天之久了,因为身体不舒服 ...

  5. CentOS上安装Hadoop2.7,添加数据节点,运行wordcount

    安装hadoop的步骤比较繁琐,但是并不难. 在CentOS上安装Hadoop2.7 1. 安装 CentOS,注:图形界面并无必要 2. 在CentOS里设置静态IP,手工编辑如下4个文件 /etc ...

  6. VB6之GIF分解

    原文链接:http://hi.baidu.com/coo_boi/item/1264a64172fe8dec1f19bc08 还是找了个C++的翻译下,原文链接:http://www.360doc.c ...

  7. 移动端300ms的点击延迟以及解决方案

    [今天做在移动端的一些效果时,我选择使用动画而不是用过渡,这个300ms的点击延迟是我为什么使用动画而不使用过渡最主要的一个原因] 动画和过渡 共同点:都是css控制DOM运动, 不同点: 1.过渡: ...

  8. Eclipse 修改 创建的Jsp的默认格式

    Eclipse 的jsp模板修改 打开 eclipse  选择 Window -- Preferences

  9. 常用精品API接口汇总

    下面列举了100多个国内常用API接口,并按照 笔记.出行.词典.电商.地图.电影.即时通讯.开发者网站.快递查询.旅游.社交.视频.天气.团队协作.图片与图像处理.外卖.消息推送.音乐.云.语义识别 ...

  10. Android6.0 中appcompat_v7 报错

    更新了AndroidSDK以后 各种错误,新建一个项目会附赠一个appcompat_v7,你只要知道这个是一个兼容包就可以了,具体的特性可以看相关介绍,其实也没啥特别的就是为了兼容低版本的呗, 但是呢 ...