ADO.NET的新增功能

ADO.NET的新增功能
ADO.NET 是一组向 .NET 程序员公开数据访问服务的类。ADO.NET 为创建分布式数据共享应用程序提供了一组丰富的组件。它提供了对关系数据、XML 和应用程序数据的访问,因此是 .NET Framework 中不可缺少的一部分。ADO.NET 支持多种开发需求,包括创建由应用程序、工具、语言或 Internet 浏览器使用的前端数据库客户端和中间层业务对象。

ADO.NET 概述
ADO.NET 对 Microsoft SQL Server 和 XML 等数据源以及通过 OLE DB 和 XML 公开的数据源提供一致的访问。数据共享使用者应用程序可以使用 ADO.NET 来连接到这些数据源,并检索、处理和更新所包含的数据。

ADO.NET 通过数据处理将数据访问分解为多个可以单独使用或一前一后使用的不连续组件。ADO.NET 包含用于连接到数据库、执行命令和检索结果的 .NET Framework 数据提供程序。您可以直接处理检索到的结果,或将其放入 ADO.NET DataSet 对象, 以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。ADO.NET DataSet 对象也可以独立于 .NET Framework 数据提供程序使用,以管理应用程序本地的数据或源自 XML 的数据。

ADO.NET 类在 System.Data.dll 中, <script type="text/javascript">google_ad_client = "pub-4475724770859924";google_alternate_color = "FFBBE8";google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as";google_ad_type = "text_image";google_ad_channel ="9379930647";google_color_border = "F8F8F8";google_color_bg = "FFFFFF";google_color_link = "FF6FCF";google_color_url = "38B63C";google_color_text = "B3B3B3";</script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script> 并且与 System.Xml.dll 中的 XML 类集成。当编译使用 System.Data 命名空间的代码时,请引用 System.Data.dll 和 System.Xml.dll。有关连接到数据库、从数据库中检索数据并在命令提示中显示该数据的 ADO.NET 应用程序示例,请参见 ADO.NET 示例应用程序。

ADO.NET 向编写托管代码的开发人员提供了类似于 ActiveX 数据对象 (ADO) 为本机组件对象模块 (COM) 开发人员提供的功能。

ADO.NET 的设计目标
随着应用程序开发的发展演变,新的应用程序越来越松散地耦合,通常基于 Web 应用程序模型。如今,越来越多的应用程序使用 XML 来编码要通过网络连接传递的数据。Web 应用程序将 HTTP 用作在层间进行通信的结构,必须显式处理请求之间的维护状态。这一新模型大大不同于连接、紧耦合的编程风格,此风格曾是客户端/服务器时代的标志。在此编程风格中,连接会在程序的整个生存期中保持打开,而不需要对状态进行特殊处理。

在设计符合当今开发人员需要的工具和技术时,Microsoft 认识到需要为数据访问提供全新的编程模型,此模型是基于 .NET Framework 生成的。基于 .NET Framework 这一点将确保数据访问技术的一致性,因为组件将共享通用的类型系统、设计模式和命名约定。

设计 ADO.NET 的目的是为了满足这一新编程模型的以下要求:具有断开式数据结构;能够与 XML 紧密集成;具有能够组合来自多个不同数据源的数据的通用数据表示形式;以及具有为与数据库交互而优化的功能,这些要求都是 .NET Framework 固有的内容。

在创建 ADO.NET 时,Microsoft 具有以下设计目标:
利用当前的 ActiveX 数据类型 (ADO) 知识。
支持 N 层编程模型。
集成 XML 支持。

ADO.NET 结构
以前,数据处理主要依赖于基于连接的双层模型。当数据处理越来越多地使用多层结构时,程序员正在向断开方式转换,以便为他们的应用程序提供更佳的可缩放性。


ADO.NET 组件
可以使用 ADO.NET 的两个组件来访问和处理数据:
.NET Framework 数据提供程序
DataSet

ADO.NET 2.0 版中新增了下列功能:

托管提供程序

服务器枚举
支持枚举 Microsoft SQL Server 2000 以及更高版本的活动实例。

异步处理
使您可以使用 API 执行异步数据库操作,该 API 在 .NET Framework 所使用的异步模型之后建模。

多个活动结果集 (MARS)
如果每个 SqlDataReader 实例均从独立的命令启动,则允许应用程序在一个连接上打开多个 SqlDataReader。

批量复制操作
支持使用 SQL Server .NET 数据提供程序执行快速的批量插入。

新的 SQL Server Max 数据类型
在 SQL Server 2005 中支持 varchar(max)、nvarchar(max)、varbinary(max) 数据类型。

SQL Server 用户定义类型
在 SQL Server 2005 中支持用户定义数据类型 (UDT)。有关更多信息,请参见创建和使用用户定义类型。

SQL Server 通知
允许 .NET Framework 应用程序向 SQL Server 发送命令,如果执行相同命令生成的结果集与最初检索到的结果集不同,请求生成通知。

SQL Server 快照隔离的事务
支持快照隔离,该 SQL Server 2005 机制旨在减少 OLTP 应用程序中的阻碍。

SQL Server 2005 中的数据库镜像
在 SQL Server 2005 中通过新的连接字符串语法支持数据库镜像,该语法指定故障转移合作伙伴服务器。

提供统计信息
在 SQL Server 2005 中支持检索运行库统计信息。目前,SQL Server .NET 提供程序提供了 21 种不同的计数器。

在 SQL Server 2005 中更改密码
允许 .NET Framework 应用程序更改用户帐户的密码,不需要管理员参与。

批处理
在从 DataSet 应用更新时,通过减少与数据库的往返次数来提高应用程序的性能。

跟踪
ADO.NET 2.0 引入了 .NET 数据提供程序支持的新的内置数据跟踪功能。

部分信任
现在,部分信任的环境中支持所有 Microsoft 数据提供程序。
连接池控制
ADO.NET 2.0 引入了两种新的方法来清除连接池:ClearAllPools 和 ClearPool。

SQL Server XML 数据类型支持
SQL Server 2005 支持新的 XML 数据类型,System.Data.SqlClient 在客户端上为该数据类型提供强大的支持。XML 值使用 System.Xml 框架公开,以便与 .NET 编程模型无缝地集成。

SQL Server 2005 与 System.Transactions 的集成以及可提升的事务优化
.NET 2.0 具有一个新的事务框架,可以通过 System.Transactions 命名空间访问。将用于分布式事务管理的 System.Transactions、用于数据库访问的 System.Data.SqlClient 和作为后端的 SQL Server 2005 组合使用时,可以优化分布式事务,使“分布式”的额外成本只有在真正需要事务时才会产生。

断开类

DataSet 增强
新的 DataTableReader 以一个或多个只读、只进结果集的形式提供 DataSet 或的 DataTable 的内容。

DataSet 增强
新的索引引擎提高对 DataTable 和 DataRow 对象的插入、删除和修改操作的性能。索引或主键必须在基表中定义。

DataSet 的二进制序列化
在通过远程处理进行二进制传输时,这个新选项使 DataSet 和 DataTable 可以使用二进制格式进行序列化。在使用远程处理连接到不同层的应用程序中使用 DataSet/DataTable 对象时,大多数情况下,这样可以大大提高性能,并明显减少内存和 CPU 的使用。

DataTable 作为独立对象
以前的版本中许多只能在 DataSet 中使用的方法现在也可以在 DataTable 中使用(例如 ReadXml 和 WriteXml)。此外,DataTable 可以自行进行序列化,所以,包含单个表的 DataSet 不必只是通过 Web 服务或任何其他要求序列化的机制来公开表。

从 DataView 创建 DataTable
现在,可以从 DataView 创建 DataTable。新的 DataTable 将与当前的 DataView 包含相同的行集。新的 DataTable 的列可以是 DataView 列的子集。行可以是所有行,也可以是个别行。有关更多信息,请参见 ToTable。

架构推断引擎增强
架构推断引擎得到了增强,如果有足够的信息,可以推断类型;速度也明显提高。

命名空间限定的表
现在,DataSet 可以支持具有相同 TableName 但是具有不同 Namespace 的表,提供了避免命名冲突的机制。

新的 DataTable 加载功能
DataTables 和 DataSets 新的 Load 方法可以直接将 DataReader 流处理到 DataTable 中。Load 方法还提供了新的加载行为选项,扩展了可以通过 DataAdapter 使用的功能。

行状态控制
新的 SetAdded 和 SetModified 方法允许应用程序显式操作 DataSet 和 DataTable 行的行状态。

增强了对自定义的用户定义类型的支持
DataTable 为自定义的用户定义类型提供更多的支持。XML 序列化已扩展为支持多态性。例如,Person 列可以存储 Employee 实例,该实例序列化为 XML 以及从 XML 反序列化,同时不会损失任何类型的保真度。此外,现在用户可以实现新的更改跟踪接口,使 DataTable 可以跟踪此类对象的更改。

XML/XSD 增强
增加了在 XSD 中读写简单类型的支持。增加了读写要流处理的多个架构的支持。增加了读写 XSD/XML 的支持,条件是单个表或 XML 元素嵌套在两个或两个以上的父表中。

DataRow 增强
新的 IndexOf 可以用于查找行在 DataTable.Rows 集合中的位置。

更改列在 DataTable 中的位置
新的 SetOrdinal 方法使用户可以更改列在 DataTable 中的位置。

DataView 性能增强
ADO.NET 2.0 中的 DataView 使用新的更新算法,大大改进了 DataView 的维护。

DataColumn 表达式
DataColumn 中的表达式可以包括同一个 DataTable 中的多个列。表达式可以更新,列值得到维护。

类型化 DataSet 的架构序列化
类型化 DataSets 可以通过将 SchemaSerializationMode 枚举设置为 ExcludeSchema,使架构组件跳过序列化。

与提供程序无关的 API
.NET 数据提供程序枚举
支持枚举已安装的数据提供程序。
与提供程序无关的 API
对 System.Data.Common 命名空间的增强支持通过单个 API 跨多个提供程序访问数据库。

架构发现
架构发现使应用程序可以请求托管提供程序查找并返回与特定数据库的数据库架构有关的信息,给定连接连接到该数据库。不同的数据库架构元素(例如表、列和存储过程)通过每个提供程序的 Connection 类的 GetSchema 方法进行公开。

阅读更多 ADO.NET DataSet DataReader 相关文章:
ADO.NET的新增功能
深入ADO.NET 2.0的DataSet对象
ADO.NET中使用DataSet类
Visual Studio 2005中DataSet新特性
详细研究Asp.Net中的DataReader
Asp.Net中使用DataReader对象


ADO.NET 示例应用程序
下面是一个简单的 ADO.NET 应用程序,它从数据源中返回结果并输出到控制台或命令提示符窗口。
SqlClient
Visual Basic
程序代码 程序代码
Option Explicit On
Option Strict On

Imports System
Imports System.Data
Imports System.Data.SqlClient

Public Class Program
Public Shared Sub Main()

Dim connectionString As String = GetConnectionString()
Dim queryString As String = _
"Select CategoryID, CategoryName FROM dbo.Categories;"

Using connection As New SqlConnection(connectionString)
Dim command As SqlCommand = connection.CreateCommand()
command.CommandText = queryString
Try
connection.Open()
Dim dataReader As SqlDataReader = _
command.ExecuteReader()
Do While dataReader.Read()
Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", _
dataReader(0), dataReader(1))
Loop
dataReader.Close()

Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Using
End Sub

Private Shared Function GetConnectionString() As String
' To avoid storing the connection string in your code,
' you can retrieve it from a configuration file.
Return "Data Source=(local);Initial Catalog=Northwind;" _
& "Integrated Security=SSPI;"
End Function
End Class


C#
程序代码 程序代码
using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
static void Main()
{
string connectionString = GetConnectionString();
string queryString =
"Select CategoryID, CategoryName FROM dbo.Categories;";
using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlCommand command = connection.CreateCommand();
command.CommandText = queryString;

try
{
connection.Open();

SqlDataReader reader = command.ExecuteReader();

while (reader.Read())
{
Console.WriteLine("/t{0}/t{1}",
reader[0], reader[1]);
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}

static private string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
return "Data Source=(local);Initial Catalog=Northwind;"
+ "Integrated Security=SSPI";
}
}

OleDb
Visual Basic
程序代码 程序代码
Option Explicit On
Option Strict On

Imports System
Imports System.Data
Imports System.Data.OleDb

Public Class Program
Public Shared Sub Main()

Dim connectionString As String = GetConnectionString()
Dim queryString As String = _
"Select CategoryID, CategoryName FROM Categories;"

Using connection As New OleDbConnection(connectionString)
Dim command As OleDbCommand = connection.CreateCommand()
command.CommandText = queryString
Try
connection.Open()
Dim dataReader As OleDbDataReader = _
command.ExecuteReader()
Do While dataReader.Read()
Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", _
dataReader(0), dataReader(1))
Loop
dataReader.Close()

Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Using
End Sub

Private Shared Function GetConnectionString() As String
' To avoid storing the connection string in your code,
' you can retrieve it from a configuration file.
' Assumes Northwind.mdb is located in c:/Data folder.
Return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
& "c:/Data/Northwind.mdb;User Id=admin;Password=;"
End Function
End Class


C#
程序代码 程序代码
using System;
using System.Data;
using System.Data.OleDb;

class Program
{
static void Main()
{
string connectionString = GetConnectionString();
string queryString =
"Select CategoryID, CategoryName FROM Categories;";
using (OleDbConnection connection =
new OleDbConnection(connectionString))
{
OleDbCommand command = connection.CreateCommand();
command.CommandText = queryString;

try
{
connection.Open();

OleDbDataReader reader = command.ExecuteReader();

while (reader.Read())
{
Console.WriteLine("/t{0}/t{1}",
reader[0], reader[1]);
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}

static private string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
// Assumes Northwind.mdb is located in the c:/Data folder.
return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ "c://Data//Northwind.mdb;User Id=admin;Password=;";
}
}


Odbc
Visual Basic
程序代码 程序代码
Option Explicit On
Option Strict On

Imports System
Imports System.Data
Imports System.Data.Odbc

Public Class Program
Public Shared Sub Main()

Dim connectionString As String = GetConnectionString()
Dim queryString As String = _
"Select CategoryID, CategoryName FROM Categories;"

Using connection As New OdbcConnection(connectionString)
Dim command As OdbcCommand = connection.CreateCommand()
command.CommandText = queryString
Try
connection.Open()
Dim dataReader As OdbcDataReader = _
command.ExecuteReader()
Do While dataReader.Read()
Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", _
dataReader(0), dataReader(1))
Loop
dataReader.Close()

Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Using
End Sub

Private Shared Function GetConnectionString() As String
' To avoid storing the connection string in your code,
' you can retrieve it from a configuration file.
' Assumes Northwind.mdb is located in c:/Data folder.
Return "Driver={Microsoft Access Driver (*.mdb)};" _
& "Dbq=c:/Data/Northwind.mdb;Uid=Admin;Pwd=;"
End Function
End Class


C#
程序代码 程序代码
using System;
using System.Data;
using System.Data.Odbc;

class Program
{
static void Main()
{
string connectionString = GetConnectionString();
string queryString =
"Select CategoryID, CategoryName FROM Categories;";
using (OdbcConnection connection =
new OdbcConnection(connectionString))
{
OdbcCommand command = connection.CreateCommand();
command.CommandText = queryString;

try
{
connection.Open();

OdbcDataReader reader = command.ExecuteReader();

while (reader.Read())
{
Console.WriteLine("/t{0}/t{1}",
reader[0], reader[1]);
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}

static private string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
// Assumes Northwind.mdb is located in the c:/Data folder.
return "Driver={Microsoft Access Driver (*.mdb)};"
+ "Dbq=c://Data//Northwind.mdb;Uid=Admin;Pwd=;";
}
}


OracleClient
Visual Basic
程序代码 程序代码
Option Explicit On
Option Strict On

Imports System
Imports System.Data <script type="text/javascript">google_ad_client = "pub-4475724770859924";google_alternate_color = "FFBBE8";google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as";google_ad_type = "text_image";google_ad_channel ="9379930647";google_color_border = "F8F8F8";google_color_bg = "FFFFFF";google_color_link = "FF6FCF";google_color_url = "38B63C";google_color_text = "B3B3B3";</script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
Imports System.Data.OracleClient

Public Class Program
Public Shared Sub Main()

Dim connectionString As String = GetConnectionString()
Dim queryString As String = _
"Select CUSTOMER_ID, NAME FROM DEMO.CUSTOMER"

Using connection As New oracleConnection(connectionString)
Dim command As oracleCommand = connection.CreateCommand()
command.CommandText = queryString
Try
connection.Open()
Dim dataReader As oracleDataReader = _
command.ExecuteReader()
Do While dataReader.Read()
Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", _
dataReader(0), dataReader(1))
Loop
dataReader.Close()

Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Using
End Sub

Private Shared Function GetConnectionString() As String
' To avoid storing the connection string in your code,
' you can retrieve it from a configuration file.
Return "Data Source=ThisOracleServer;Integrated Security=yes;"
End Function
End Class


C#
程序代码 程序代码
using System;
using System.Data;
using System.Data.OracleClient;

class Program
{
static void Main()
{
string connectionString = GetConnectionString();
string queryString =
"Select CUSTOMER_ID, NAME FROM DEMO.CUSTOMER";
using (OracleConnection connection =
new oracleConnection(connectionString))
{
oracleCommand command = connection.CreateCommand();
command.CommandText = queryString;

try
{
connection.Open();

oracleDataReader reader = command.ExecuteReader();

while (reader.Read())
{
Console.WriteLine("/t{0}/t{1}",
reader[0], reader[1]);
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}

static private string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
// Assumes Northwind.mdb is located in the c:/Data folder.
return "Data Source=ThisOracleServer;Integrated Security=yes;";
}
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值