ADO.NET 快速入门(一):ADO.NET 概述

ADO.NET 概述

ADO.NET是改进的ADO数据访问模型用于开发可扩展应用程序。他是专门为可伸缩性、无状态和XML核心的web而设计的。
 
ADO.NET使用一些ADO对象,如ConnectionCommand对象,也引入了一些新对象。关键的新对象包括DataSetDataReader,和DataAdapter
 
这种改进的ADO.NET和以前的数据架构的重要区别在于存在一个对象--DataSet对象--这是独立的不一样于任何的数据存储。正由于如此,DataSet功能可以做为独立的实体。你能够将DataSet理解为老是断开链接对他包含的数据源和目标一无所知的记录集,在DataSet内部,就像一个数据库同样,有表,列,关系,约束,视图等等。
 
DataAdapter是一种链接到数据库来填充DataSet的对象。而后,链接回数据库更新数据,基于DatSet拥有数据的操做操做。在过去,数据处理一直是基于链接的。如今,为了使多层应用更高效,数据处理正在转向基于消息的方式。这种处理方式的核心是DataAdapter,提供了在DataSet和数据源之间用于检索和保存数据的桥梁。它是经过对数据存储请求正确的SQL指令实现的。
 
基于XML的DataSet对象提供了一个统一的编程模型,以致于适用于全部的数据存储:结构型,关系型,和层级型。他是经过对数据源“一无所知”,而且用他持有的集合和数据类型表示数据作到的。不管DataSet内部是什么数据源,都是经过调用同一套标准API暴露DataSet和相关对象的。

当DataSet对数据源不可知的时候,托管提供程序享有详尽的具体信息。托管提供程序的做用是链接,填充,并从数据存储持久化DataSet。OLE DB和SQL Server .NET框架部分的数据提供程序(System.Data.OleDb和System.Data.SqlClient)提供了四个基本对象:Command对象,Connection对象,DataReader对象和DataAdapter对象。在本文剩下的内容里,咱们会遇到DataSet的每一个部分,而且解释OLE DB/SQL Server .NET数据提供程序是什么,以及如何使用它们进行编码。


下面的章节会 给你 介绍一些改进后的对象,和一些新的对象。这些对象是: 
  • Connections. 用于链接和管理针对数据库的事务。
  • Commands. 用于发出针对数据库的SQL指令。
  • DataReaders. 用于从SQL Server数据源读取只进流的数据记录。
  • DataSets. 用于针对结构型数据,XML数据和关系型数据的存储,远程处理和编程。
  • DataAdapters. 用于推送数据到DataSet,并针对数据库协调数据。
 
注意:当处理数据库链接的时候,有两种不一样的选项:SQL Server .NET 数据提供程序(System.Data.SqlClient)和OLE DB .NET 数据提供程序(System.Data.OleDb)。在这些实例中咱们会使用SQL Server .NET数据提供程序。这些被直接写入Microsoft SQL Server。OLE DB .NET数据提供程序经常使用于任一OLE DB 提供者(它使用OLE DB)
 
Connections 

Connections用于和数据库“沟通”,而且被声明为特定的提供程序级别,例如SQLConnection。Commands扫描链接而后结果集以流的形式被返回,这种流能够被DataReader对象读取,或者推入DataSet对象。


下面的例子演示了如何建立一个链接对象。Connections能够经过调用Open方法被显式打开,或者使用DataAdapter的时候被隐式打开。
 

若要确保链接始终关闭,请在 using 块内部打开链接,以下面的代码段所示。 这样可确保在代码退出代码块时自动关闭链接。web

 
using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        // Do work here; connection closed on following line.
    }

 

 
 
Commands
 
Commands包含提交到数据库的信息,特定于提供程序的类好比SQLCommand。一个命令能够是一个存储过程调用,一个UPDATE语句,或者一个返回结果的语句。你也可使用输入和输出参数,返回值做为命令的一部分。下面的示例演示了如何 对Northwind数据库 执行一条INSERT语句。
 

下面的示例建立一个 SqlConnection、一个 SqlCommand 和一个 SqlDataReader 该示例读取全部数据,并将其写到控制台。 最后,示例在退出 Using 代码块时前后关闭 SqlDataReader 和 SqlConnectionsql

 
private static void ReadOrderData(string connectionString)
{
    string queryString = 
        "SELECT OrderID, CustomerID FROM dbo.Orders;";
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        SqlCommand command = new SqlCommand(
            queryString, connection);
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",
                    reader[0], reader[1]));
            }
        }
        finally
        {
            // Always call Close when done reading.
            reader.Close();
        }
    }
}

 

 
DataReaders
 
DataReader对象有点相似一种只读/只进的数据游标。DataReader API不但支持平级数据并且支持层级数据。数据库执行一条命令后会返回一个DataReader对象。返回的DataReader对象格式不一样于一个记录集。好比,你能够在一个web页面使用DataReader显示搜索结果列表。
 

下面的示例建立一个 SqlConnection、一个 SqlCommand 和一个 SqlDataReader。 该示例读取所有数据,并将这些数据写到控制台窗口。 随后此代码关闭 SqlDataReader。 SqlConnection 在 using 代码块的结尾处自动关闭。数据库

using System;
using System.Data;
using System.Data.SqlClient;


class Program
{
    static void Main()
    {
        string str = "Data Source=(local);Initial Catalog=Northwind;"
            + "Integrated Security=SSPI";
        ReadOrderData(str);
    }

    private static void ReadOrderData(string connectionString)
    {
        string queryString =
            "SELECT OrderID, CustomerID FROM dbo.Orders;";

        using (SqlConnection connection =
                   new SqlConnection(connectionString))
        {
            SqlCommand command =
                new SqlCommand(queryString, connection);
            connection.Open();

            SqlDataReader reader = command.ExecuteReader();

            // Call Read before accessing data.
            while (reader.Read())
            {
                ReadSingleRow((IDataRecord)reader);
            }

            // Call Close when done reading.
            reader.Close();
        }
    }

    private static void ReadSingleRow(IDataRecord record)
    {
        Console.WriteLine(String.Format("{0}, {1}", record[0], record[1]));
    }

}

 

 
DataSets and DataAdapters
 
 
DataSets
 
DataSet对象和ADO RecordSet对象类似,但更强大,而且有一个重要区别:DataSet老是断开链接的。DataSet表明缓存数据,与数据库结构相似例如表,列,关系,和约束。然而,尽管DataSet能够也确实表现的更像一个数据库,最重要的请记住DataSet对象不直接和数据库交互,或者其余数据源。这使得开发人员不管使用什么数据源均可以始终使用一种一致的编程模型。数据从数据库,XML文件来,或者从用户输入来均可以放进DatSet对象。而后,当更改DataSet就能够被跟踪和验证以前更新数据源。DataSe t 对象的GetChanges方法实际上建立了第二个仅包含更改数据的DataSet。而后由DataAdapter(或其余对象)使用这个DataSet来更新原始数据源。
 
 
DataSet具有XML的特性,包括生产和消费XML数据和XML模式的能力。XML模式能够用来描述经过XML Web服务交换的模式。事实上,模式化DataSet实际上能够被编译为类型安全和完整的语句。
 
 
 
DataAdapters (OLEDB/SQL)
 
DataAdapter对象做为DataSet和数据源之间的桥梁。当使用Microsoft SQL Server数据库时,利用特定提供程序SqlDataAdapter(和他相关的SqlCommand和SqlConnection)能够提升总体的性能。对于其余支持OLE DB的数据库,你可使用OleDbDataAdapter和他先关的OleDbCommand和OleDbConnection对象。
 
DataAdapter对象使用命令在DataSet完成变更后更新数据源。使用DataAdapter的Fill方法调用SELECT命令;使用Update方法对于每一个更改行调用INSERT、UPDATE或者DELETE命令。你能够显示设置这些命令以便在运行时控制这些语句的使用解决变动,包括使用存储过程。对于特别的场景,CommandBuilder对象能够在运行时基于select语句生成这些语句。然而,运行时建立语句须要 在服务器作 额外的往返以便手机必须的源数据,因此在设计阶段显示的提供INSERT、UPDATE、和DELETE命令会致使更好的运行时性能。
 

下面的示例使用 SqlCommand、SqlDataAdapter 和 SqlConnection 从数据库中选择记录,并用选定的行填充 DataSet 而后返回已填充的 DataSet 为完成此任务,向该方法传递一个已初始化的 DataSet、一个链接字符串和一个查询字符串,后者是一个 Transact-SQL SELECT 语句。编程

 
private static DataSet SelectRows(DataSet dataset,
    string connectionString,string queryString) 
{
    using (SqlConnection connection = 
        new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(
            queryString, connection);
        adapter.Fill(dataset);
        return dataset;
    }
}

 

适应的记录映射到相应的命令。
 
 
 
图示:DataAdapter和DataSets
 
 
下面的示例说明了经过SELECT语句加载DataAdapter,而后在DataSet内部更新、删除以及添加一些记录。最后,经过DataAdapter返回那些对数据库源的更新。这些构造的DeleteCommand、InsertCommand与UpdateCommand被显示在页面。也举例说明了使用多个DataAdapter对象加载多个表(Customers和Orders)到DataSet。
 
 
小结:
  1. ADO.NET是适合于.NET框架的改进版的ADO。
  2. ADO.NET是在多层架构、无状态性与XML的状况下诞生的。DataSet和DataAdapter2个对象提供这些场景。
  3. ADO.NET能够被用于从流获取数据,或者缓存用于更新的数据。  
  4. 在文档里有更多关于ADO.NET的资料。  
  5. 请记住,你能够直接对数据库执行命令以便插入、更新,与删除数据。你没有必要为了插入、更新、或删除数据把它放入DataSet。
  6. 一样,你可使用DataSet绑定到数据,浏览数据,以及操做数据关联。

原文地址:缓存

http://quickstarts.asp.net/QuickStartv20/howto/doc/adoplus/overviewcontents.aspx安全

相关文章
相关标签/搜索