ADO.NET概述

本节复习如何使用ADO.NET访问C#程序中的数据,主要介绍如何使用SqlConnection类和OleDbConnection类连接数据库,以及断开与数据库连接。深入讨论命令对象的各种选项,并说明如何为sql类和OleDB类的每个选项使用命令。如何使用命令对象来调用存储过程,这些存储过程的结果如何集成到缓存的客户端上的数据中。

介绍ADO.NET

ADO.NET比现在有的API在技术上高出很多。它与ADO仅仅是名称类型,类和访问数据的方法完成不同。

ADO(ActiveX Data Objects)是一个COM组件库,ADO主要包含Connection、Command、Recordset、Field对象。使用ADO时,要打开与数据库的连接,选择一些数据,并把它们放在记录集合中,这些记录集由字段组成,最后关闭联系。

ADO还引入:断开连接的记录集,当不适合使用连接打开相当长的时间时,就可以使用这个。

ADO.NET使用由ADO升级而来。并附带3个数据库客户端名称空间。

  1. 用于SQL Server
  2. 用于ODBC数据源
  3. 用于通用的OLE DB实现的数据库

如果数据库是不SQL Server,就应该在线搜索一个专门的.NET提供程序,找不到就应该使用OLE DB.

命名空间

下图显示了.NET数据访问中使用的类和接口命名空间。

共享类

ADO.NET包含许多类,无论是使用SQL Server类还是使用OLE DB类,都可以使用它们。命名空间是System.Data.

数据库专用类

除了共享类之外,ADO.NET还包含许多数据库专用类。这些类实现一组在System.Data命名空间对应的标准接口,根据需要允许类按照一般形式来使用。如SqlConnection类和OleDbConnection类都是派生与实现了IDbConnection接口的DbConnection类。

// 摘要:
// 表示 SQL Server 数据库的一个打开的连接。此类不能被继承。
[DefaultEvent("InfoMessage")]
public sealed class SqlConnection : DbConnection, ICloneable // 摘要:
// 表示到数据源的连接是打开的。
[DefaultEvent("InfoMessage")]
public sealed class OleDbConnection : DbConnection, ICloneable, IDbConnection, IDisposable

其他专用类如下:

ADO.NET类最重要的功能是:它是以断开连接的方式工作。特别适合Web为中心环境。传统的ADO2.1引入断开连接的记录集,但是由于不是一开始就设计好,不如ADO.NET完善。

使用数据库连接

为了访问数据库,需要提供某种连接参数,如运行数据库的计算机和登录证书。ADO.NET连接类是OleDbConnection和SqlConnection。类的层次结构如下

代码示例

 using System.Data.SqlClient;
string strConn = "Data Source=****;Initial Catalog=***;User Id=sa;Password=****;";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = strConn;
conn.Open();
//做一些事情 conn.Close();

管理连接字符串

在以前的版本中,由开发人员管理数据库连接字符串,其方法是把连接字符串存储在应用程序配置文件中,或者直接硬编码连接字符串。

.NET2.0开始,有一种预定义的方式存储连接字符串,要定义数据库连接字符串,应该使用配置文件中部分,在这边指定连接的名称、数据库连接串的实际参数,还需要指定这个连接类型的提供程序。

<connectionStrings>
<add name="ADOTest" providerName="System.Data.SqlClient"
connectionString="Data Source=***;Initial Catalog=***;User Id=sa;Password=**;" />
</connectionStrings>

程序中读取数据库连接的方法示例:

  private static DbConnection GetDatabaseConnenction(string name)
{
ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings[name];
DbProviderFactory factory = DbProviderFactories.GetFactory(settings.ProviderName);
DbConnection conn = factory.CreateConnection();
conn.ConnectionString = settings.ConnectionString;
return conn;
}

这对应获取数据库连接似乎是不必要的工作,如果应用程序从来不运行在其他数据库上,这些工作的确没有必要,但是使用签名的工厂方法和泛型Db*类,就会发现以后将应用迁移到另一个数据库系统上非常简单方便。

高效地使用连接

一般情况下,当在使用“稀缺”的资源是,如数据库连接、窗口,最好确保每个资源使用完成立刻关闭,尽管有自动垃圾回收,但还是尽早释放资源,避免出现资源的匮乏的情况。下面介绍两种方式确保数据库连接等类似“稀缺”资源在使用后立即释放。

  1. 第一种方式----利用try...catch...finally,确保在finally块中关闭任何打开的连接。
  2. 第二种方式---使用using语句块

在using语句块中无论块是如何退出的,using子句都会确保关闭连接。在编程时,应至少使用两种方法中的一种,或者两种方法都使用,最好是组合使用这个两种方法。

事务

对数据库要进行多次更新,这些更新必须在事务的范围内进行。我们常常要在代码中查找一个事务对象,它传递给许多方法,以便更新数据库。

2.0以后在System.Transacions程序集中添加了TransactionScope类,简化了事务代码的编写,可以把几个事务方法合并到一个事务范围中。

在事务作用域中,可以选择在该事务中执行命令的独立级别,该级别确定了如何在一个数据库会话中查看在另一个数据会话中所进行的修改,并不是所有数据库都支持。

这个节比较难懂,一般不会这样使用事务的,会使用数据库事务。

命令

命令就是一个要在数据库上执行包含SQL语句的问题吧字符串,也可以是一个存储过程。

把SQL子句作为一个参数传递给Command类的构造函数,就可以构造一条命令。

<provider>Command类有一个CommandType属性,它用来定义某条命令是SQL子句、存储过程还是完整的表语句。

执行命令

定义好命令后,就需要执行它,执行语句有许多方式,这取决于要从命令中返回什么数据。

<provider>Command类提供了如下执行命令:

  • ExecuteNonQuery()--执行命令,但返回影响的行数。
  • ExecuteReader()--执行命令,返回一个类型化的IDataReader
  • ExecuteScalar()--执行命令,返回结果集中的第一行第一列的值。

sqlCommand类提供了下面方法:

  • ExecuteXmlReader()---执行命令,返回一个XmlReader对象,它可以遍历从数据库返回的xml片段。

ExecuteNonQuery()方法

这个方法一般用于update、insert、delete语句,其中唯一的返回值是受影响的行数,但如果调用带输出参数的存储过程,该方法就有返回值了。

ExecuteReader()方法

这个方法执行命令,并根据使用的提供程序返回一个类型化的DataReader对象,返回的对象可以用于遍历返回的记录。

ExecuteScalar()方法

这个方法执行命令,需要从SQL语句返回一个结果,该返回一个对象,根据需要可以把对象强制转换为合适的类型。

调用存储过程

用命令对象调用存储过程,就是定义存储过程的名称,给过程的每个参数参数定义。

调用没有返回值的存储过程

CommandType.StoredProcedure

Command.Parameters 添加参数

执行使用ExecuteNonQuery

调用返回参数的存储过程

CommandType.StoredProcedure

Command.Parameters 添加输出参数

执行使用ExecuteNonQuery

如果返回的不是一个参数而是一组记录行,应该调用ExecuteReader方法。遍历所有返回记录。

参考图书《C#高级编程》

ADO.NET温习(一)的更多相关文章

  1. 我的Android进阶之旅------>温习Sqlite3的常用操作

    前言;今天要写一个应用来调节系统的Brightness值,来改变系统的背光亮度.由于刚开始些的时候没有考虑Brightness的最小值,直接托动SeekBar到最小值(为0).瞬间,屏幕变成全黑,失败 ...

  2. 前端框架 EasyUI (0) 重新温习(序言)

    几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...

  3. ADO.NET对象的详解

    1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...

  4. WebForm获取GET或者POST参数到实体的转换,ADO.NET数据集自动转换实体

    最近在修改维护以前的webform项目(维护别人开发的.....)整个aspx没有用到任何的控件,这个我也比较喜欢不用控件所以在提交信息的时候需要自己手动的去Request.QueryString[] ...

  5. ADO.NET编程之美----数据访问方式(面向连接与面向无连接)

    最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...

  6. ADO.NET一小记-select top 参数问题

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 最近使用ADO.NET的时候,发现select top @count xxxx 不 ...

  7. .NET基础拾遗(6)ADO.NET与数据库开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  8. 升讯威ADO.NET增强组件(源码):送给喜欢原生ADO.NET的你

    目前我们所接触到的许多项目开发,大多数都应用了 ORM 技术来实现与数据库的交互,ORM 虽然有诸多好处,但是在实际工作中,特别是在大型项目开发中,容易发现 ORM 存在一些缺点,在复杂场景下,反而容 ...

  9. ADO.NET Entity Framework 在哪些场景下使用?

    在知乎回答了下,顺手转回来. Enity Framework已经是.NET下最主要的ORM了.而ORM从一个Mapping的概念开始,到现在已经得到了一定的升华,特别是EF等对ORM框架面向对象能力的 ...

随机推荐

  1. SimRank协同过滤推荐算法

    在协同过滤推荐算法总结中,我们讲到了用图模型做协同过滤的方法,包括SimRank系列算法和马尔科夫链系列算法.现在我们就对SimRank算法在推荐系统的应用做一个总结. 1. SimRank推荐算法的 ...

  2. 《JAVASCRIPT高级程序设计》第五章(1)

    引用类型是一种将数据和功能组合到一起的数据结构,它与类相似,但是是不同的概念:ECMAScript虽然是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和结构等基本结构.引用类型也被称为“对 ...

  3. canvas粒子时钟

    前面的话 本文将使用canvas实现粒子时钟效果 效果展示 点阵数字 digit.js是一个三维数组,包含的是0到9以及冒号(digit[10])的二维点阵.每个数字的点阵表示是7*10大小的二维数组 ...

  4. docker - 容器里安装ssh

    docker安装ssh 通过命令行安装 pull ubuntu镜像 docker pull ubuntu:latest 启动并进入bash docker run -it -d ubuntu:laste ...

  5. C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(下)),不对的地方欢迎指出与交流. 章节出自<Professional C ...

  6. gitHub搭建

    1.注册一个gitHub账户 2.新建立一个远程仓库(登陆进去后-->点击图标 --> New repository ) 3.跳转后,填写相关信息(仓库名称及选项) 4.在本地的文件夹里右 ...

  7. 学习git的使用--在当地的简单命令--01

    <----------git安装完成后操作-----------------> git config --global user.name "scy"添加用户名git ...

  8. java学习笔记——IO流部分

    IO流常用的有:字符流.字节流.缓冲流.序列化.RandomAccessFile类等,以上列出的都是开发中比较常用的. 1.字节流: 字节流包含:FileInputStream/FileOutputS ...

  9. 关于Monkey的一切都在这里

    关于Monkey的一切都在这里 版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 允许有条件转载,转载请附带底部二维码. 一.什么是Monkey Monkey是 ...

  10. php投票练习

    一.题目要求:建立如下两个数据库,实现投票和%的统计结果: 二.具体编写方法: (1).建立数据库: 里面的蓝色背景的表格名称就是我们所需的表格! 表格内容如下: 表名:diaoyantimu 表名: ...