ADO.NET(ActiveX Data Objects)

ADO.NET概述

ADO.NET是与C#和.NET Framework一起使用的类集的名称,用于关系型的、面向表的格式访问数据。
ADO.NET包括所有的System.Data命名空间及其嵌套的命名空间,如:System.Data.SqlClient,System.Data.OleDb,及System.Xml空间中的一些与数据访问相关的专用类。

ADO.NET 的设计目标

1、简单的访问关系数据
ADO.NET的主要目标是提供对关系数据的简单访问功能。引入了DataSet类,来自封装在一个单元中的关联表中的一组数据,并维持他们之间完整的关系。

2、可扩展性
ADO.NET可以扩展---它为插件.NET数据提供者提供了框架,这些提供者可以用于从任何数据源读写数据。ADO.NET提供了几种内置的.NET数据提供者,用于SQL,Oracle,OBDC(微软开发数据库链接API),OLEDB(微软基于COM的数据链接和嵌入数据库的API)。

3、支持多层应用程序
ADO.NET 用于多层应用程序。电子商务应用程序最常见的体系结构。在多层体系结构中,应用逻辑的不同部分运行在不同的层上,只与其上或其下的层通信。
最常见的模型是三层模型:
数据层:包含数据库和数据访问代码。
中间层:包含业务逻辑,定义应用程序的独特功能。
显示层:提供用户界面,控制应用程序的流程,对用户输入进行验证等。

4、统一XML和关系数据访问
ADO.NET另一个重要的目标是沟通行、列和XML文档中的关系数据,其中XML文档具有分层的数据结构。.NET技术是以XML为基础构建的,ADO.NET可以扩展的用法。


ADO.NET类和对象概述

    可以把类分为.NET数据提供者对象和用户对象。
提供者对象专用于每一种类型(SQL,Oracle,XML,Access)的数据源;专用于提供者的对象完成数据源中实际的读取和写入工作。
用户对象是将数据读入到内存中后用来访问和操作数据的对象。
    提供者对象需要一个活动的连接,可以使用它们先读取数据,然后根据需要,通过用户对像使用内存中的数据,也可以使用提供者对象更新数据源中的数据,并将变动写回到数据源中。用户对象以非连接方式使用;甚至在数据库连接关闭后,也可以使用内存的数据。

1、提供者对象

 即在每一个.NET数据提供者中定义的对象,其名称前带有特定提供者的名称。因此,用于OLEDB提供者的连接对象就是OleDbConnection;用于SQL Server .NET提供者的类就是SqlConnection。
    1.1 连接对象
    连接对象是我们使用的第一个对象,用于任何其他ADO.NET对象之前。它提供了到数据源的基本连接。若果使用的是需要用户名和密码的数据库,或者是位于远程网络服务上的数据库,则连接对象就可以提供建立连接并登陆的细节。
    1.2 命令对象
    可以使用此对象给数据源发出命令,比如“SELECT * FROM Customers”查询Customers表中的数据。对于不同的提供者,该对象的名称是用于SQL Server的SqlCommand,用于ODBC的ObdcCommand和用于OLE DB的OleDbCommand。
    1.3 CommandBuilder对象
    此对象用于构建SQL命令,在基于单一表查询的对象中进行数据修改。对于不同的提供者,该对象的名称是用于SQL SERVER的SqlCOmmandBuilder,用于ODBC的OdbcCommandBuilder和用于OLE DB的OleDbCommandBuilder。
    1.4 DataReader对象
    这是一个快速而易用的对象,可以从数据源中读取仅能向前和只读的数据流(比如找到的用户集合)。对于简单地读取数据来说,此对象的性能最好。对于不同的提供者,该对象的名称是用于SQL SERVER的SqlDataReader,用于ODBC的OdbcDataReader和OLE DB的OleDbDataReader。
    1.5 DataAdapter对象
    是一个通用的类,可以执行针对数据源的各种操作,包括更新变动的数据,填充DataSet对象以及其他操作,对于不同的提供者,该对象的名称是用于SQL SERVER 的SqlDataReader,用于ODBC的OdbcDataReader和用于OLEDB的OleDbDataAdapter。


2、用户对象

    用于定义 ADO.NET 的断开的、客户端的对象,它们与.NET数据提供者无关,存在于 System.Data 命名空间中。
    2.1 DataSet 对象
    DataSet是用户对象中的首要对象,此对象表示一组相关表,在应用程序中这些表作为一个单元来引用。例如,Customers、Orders和Products 是一个 DataSet 中的表,它们表示每一位顾客和他们从公司中订购的产品。有了此对象,就可以快速从每一个表中获取所需要的数据,当与服务器断开时检查并修改数据,然后在另一个操作中使用这些修改的数据更新服务器。
    DataSet 允许访问低级对象,这些对象代表单独的表和关系。这些对象是 DataTable 对象和 DataRelation 对象
    2.2 DataTable 对象
    此对象代表 DataSet 中的一个表。例如,Customers、Orders 或 Products。DataTable 对象允许访问其中的行和列:
DataColumn 对象:代表表中的一列,比如 OrderID或 CustomerName。
DataRow 对象:代表来自的关联数据的一行;例如某位客户的 CustomerID、姓名和地址等。
    2.3 DataRelation 对象
    此对象代表通过共享列而发生关系的两个表之间的关系;例如 Orders 表中的 CustomerID 列标识发出订单的客户。于是,可以创建DataRelation 对象,通过共享列 CustomerID建立 Customers 和 Orders 表之间的关系。

3、使用 System.Data 命名空间
   在C#代码中使用ADO.NET 的第一步是引用 System.Data 命名空间,其中含有所有的ADO.NET 类。
   using System.Data;
   接着需要为所使用的特定数据源引用 .NET数据提供者。
   SQL Server .NET 数据提供者
   using System.Data.SqlClient;
   Oracle .NET 数据提供者
   using System.Data.OracleClient;
   OLE DB .NET 提供者
   using System.Data.OleDb;
   ODBC .NET 数据提供者
   using System.Data.Obdc;
   其他内置的(第三方)数据提供者

3、使用DataReader 读取数据

   从程序提取数据的5步骤:
   连接数据源(创建连接对象)
   打开连接
   发出一个SQL查询命令
   使用DataReader读取或显示数据
   关闭DataReader和连接

 本例使用 DataReader 从Northwind 表中提取 CustomerID 和 CompanyName列

 

ContractedBlock.gif ExpandedBlockStart.gif Code
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.Data.SqlClient;
 5
 6namespace DataReader
 7ExpandedBlockStart.gifContractedBlock.gif{
 8    class Program
 9ExpandedSubBlockStart.gifContractedSubBlock.gif    {
10        static void Main(string[] args)
11ExpandedSubBlockStart.gifContractedSubBlock.gif        {
12            //实例化一个连接对象(thisConnection)
13            SqlConnection thisConnection = new SqlConnection(@"Server=(local)    \SQLEXPRESS;Integrated Security=True;"+"Database=northwind");
14            
15           //打开一个连接
16            thisConnection.Open();
17
18        //为thisConnection对象创建命令对象(thisCommand),并给它提供SQL命令,执行数据库操作;
19         //连接对象thisConnection具有CreateCommand()方法,可以创建与此连接的相关命令,从而得到命令对象。
20         //命令本身被指派给命令对象的CommandText属性。
21         SqlCommand thisCommand = thisConnection.CreateCommand();
22        thisCommand.CommandText = "Select CustomerID,CompanyName FROM Customers";
23            
24       //读取和显示数据。首先要读取数据,为此要使用DataReader对象。DataReader是一个轻量级的对象,可以迅速的
25        //获取查询的结果。它是只读的,因此不能使用它更新数据。
26        //使用命令对象中的方法来创建所需对象的相关实例,即DataReader。
27        //ExecuteReader()在数据库中运行SQL命令,因此也在此生成所有的数据错误;它还创建读取器对象,
28        //用于读取生成的结果,这里将其结果指派给thisReader对象。
29         SqlDataReader thisReader = thisCommand.ExecuteReader();
30
31       //可以通过几种方法从读取器中获取结果,下面是常见的过程。DataReader的Read()方法,从查询结果中读取一
32        //行数据,如果还有数据,则返回TRUE,否则返回false。因此建立一个while循环,使用Reader()方法读取数
33        //据,当迭代他们时,输出结果DataReader对象提供索引符属性,这个索引符是重载的,
34        //允许把列引用为按列名称的数组应用:thisReader["CustomerID"]
35        //thisReader["CompanyName"],或者按整数引用thisReader[0],thisReader[1]。
36            while (thisReader.Read())
37ExpandedSubBlockStart.gifContractedSubBlock.gif            {
38             Console.WriteLine("\t{0}\t{1}",thisReader["CustomerID"],thisReader["CompanyName"]);
39            }

40            //关闭连接
41            thisReader.Close();
42            thisConnection.Close();
43            Console.ReadLine();
44        }

45    }

46}

47

转载于:https://www.cnblogs.com/wcx2001/archive/2008/10/14/1310624.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值