.NET 数据提供程序的信息: 路线图

文章翻译 文章翻译
文章编号: 313480 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文提供了学习和掌握 ADO.NET 的路线图数据提供程序。路线图的文章提供了有用的信息,这些信息的链接包括联机文档,Microsoft 知识库文章,以及 Microsoft 白色白皮书,以帮助您了解有关 Microsoft 产品或技术。

有关其他信息ADO.NET 技术路线图的文章,请单击下面的文章编号,以查看Microsoft 知识库中相应的文章:
313590 ADO.NET 的信息: 路线图
有关 ADO.NET DataAdapter对象的其他信息,请单击下面的文章编号,以查看在文章Microsoft 知识库文章:
313483 ADO.NET DataAdapter 对象的信息: 路线图

概述和体系结构

Microsoft.NET 数据提供程序所提供的类的一组对一个数据库或数据源的访问。Microsoft.NET Framework 包括两个数据提供程序:
  • OLE DB.NET 数据提供程序 (OleDb),访问数据库通过 Microsoft OLE DB
  • SQL Server.NET 数据提供程序 (SqlClient),提供了直接、 高性能访问 Microsoft SQL Server 7.0 版和更高版本
其他数据提供程序将会提供在 Web 上使用,并且从第三方供应商。此外,还可以使用可用的软件开发工具包 (SDK) 来编写您自己的数据提供程序。

每个数据提供程序包括连接命令参数的对象,以及新的DataReader事务对象。本文提供了可帮助您使用的引用.NET 数据提供程序在您的应用程序中的对象。

有关的概述.NET 数据提供程序,请参考 Microsoft Visual 中的以下主题Studio.NET 联机帮助文档中: Visual Studio.NET 和.NET 开发平台包括SqlClient 和 OleDb.NET 数据提供程序。您可以将 ODBC.NET 下载数据提供程序从下列 Microsoft Web 站点:
http://msdn2.microsoft.com/en-us/data/aa937730.aspx
MSDN 文章

ADO.NET 的初级读本
http://msdn.microsoft.com/en-us/library/aa902662 (v=sql.80).aspx

编程注意事项

请始终调用关闭或要显式关闭或释放应用程序代码中的连接DataReader对象的Dispose方法。不要让倒出的对象作用域,或将其设置为Nothing (在 Visual Basic 中) 或null (在 C# 和 Visual C++)。如果不调用关闭释放,直到下一次垃圾回收占用昂贵的资源集合。

但是,不要调用关闭释放连接对象、 一个DataReader对象,或在您的类的Finalize方法的其他任何托管的对象。时,会调用一个对象的终结器进行垃圾回收。在关闭释放调用您的类的Finalize方法中的托管对象时,可以出现问题,如果此类,您释放的不是线程安全,而且如果运行应用程序多处理器计算机。

在终结器中,您应该仅释放您的类直接拥有的非托管的资源。如果您不拥有任何非托管的资源,不要在类定义中包括Finalize方法。这一点尤其重要如果Windows 服务、 Web 服务或其他 ASP.NET 应用程序使用您的类。这些类型的应用程序不具有在该服务器上的用户界面计算机。任何断言或引发其他错误可能会导致服务器进程停止响应 (挂起)。


快速入门示例和演练中,Microsoft 知识库文章

快速入门示例文件提供代码示例,供您参考。演练提供了简短教程,可指导您完成典型的应用程序开发方案。Microsoft 知识库文章中的"如何"文章提供了有关如何完成特定任务的分步指导。

"Visual Studio.NET 联机帮助主题、 演练中,快速入门示例文件并描述了在以下各节中的 Microsoft 知识库文章如何使用.NET 数据提供程序。

MSDN 文章
使用.NET 数据提供程序访问数据
http://msdn2.microsoft.com/en-us/library/s7ee2dwt (vs.71).aspx
快速入门示例

快速入门示例文件安装在您的计算机上在两个位置之一。如果您安装了快速入门示例文件的一部分Visual Studio.NET 中,该文件位于以下文件夹中的示例:
C:\Program 主题 Visual Studio.NET\FrameworkSDK\Samples\QuickStart\...
如果您安装了快速入门示例文件作为.NET 的一部分开发平台、 示例文件位于以下文件夹中:
C:\Program Files\FrameworkSDK\Samples\QuickStart\...
演练

在 Visual Studio.NET 中,在帮助菜单上,单击索引。在查找文本框中,键入 演练中数据."索引结果窗格中显示的数据访问演练的列表。

Microsoft 知识库文章
310985 如何: 使用 ODBC.NET 托管提供程序在 Visual Basic.NET 和连接字符串
310988 如何: 使用 ODBC.NET 托管提供程序中 C#.NET 和连接字符串
单击此处可查看有关.NET 数据提供程序的如何文章的列表

连接

一般情况下, OleDbConnectionOdbcConnection对象的有效连接字符串是与 Microsoft 的连接字符串相同,ActiveX 数据对象 (ADO) OLE DB 和 ODBC 分别。二者的主要区别是您不能使用OleDbConnection对象连接到 ODBC 驱动程序。您必须使用 ODBC.NET数据提供程序相反。此外,该 OleDb.NET 数据提供程序要求OLE DB 提供程序支持特定的接口。这些接口的列表Visual Studio.NET 联机帮助中的下列主题,请参阅文档或 MSDN,请:
使用 OLE DB.NET 数据提供程序的 OLE DB 接口
http://msdn.microsoft.com/en-us/library/cwctxe7a (v=vs.71).aspx
可以对 SqlClient.NET 数据提供程序的连接字符串一种主要使用 ODBC 或 OLE DB 连接字符串中的元素异常: SqlClient.NET 数据提供程序不能使用数据源名称(Dsn),文件 Dsn 或用户定义类型 (UDT) 的文件。此外,SqlClient.NET 数据提供程序不能指定驱动程序提供程序的元素。

有关可用的SqlConnection对象的连接字符串元素的详细信息,请参阅 Visual Studio.NET 中的以下主题联机帮助文档或 MSDN:
SqlConnection.ConnectionString 属性
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx
与早期版本不同的 ADO,ADO.NET 中的连接对象不允许您运行命令。您必须使用命令对象。此外,如何控制中的交易记录ADO.NET 是与在早期版本的 ADO 是不同的。

如果您将SqlCommandOleDbCommand组件添加到您的应用程序通过工具箱中 (在数据库选项卡),可以在设计时,通过编辑属性属性窗口。

Visual Studio.NET 的联机帮助文档
连接到使用 ADO.NET 数据源
http://msdn.microsoft.com/en-us/library/32c5dh3b (v=vs.71).aspx

连接到 SQL Server 使用 ADO.NET
http://msdn.microsoft.com/en-us/library/aa719765 (v=vs.71).aspx

对于 SQL Server.NET 数据提供程序的连接池
http://msdn.microsoft.com/en-us/library/8xx3tyca (v=vs.71).aspx

连接到一个使用 ADO.NET 的 OLE DB 数据源
http://msdn.microsoft.com/en-us/library/aa719763 (v=vs.71).aspx

连接池为 OLE DB.NET 数据提供程序
http://msdn.microsoft.com/en-us/library/aa719769 (v=vs.71).aspx

使用连接事件
http://msdn.microsoft.com/en-us/library/a0hee08w (v=vs.80).aspx
Microsoft 知识库文章
309485 如何: 通过使用 Visual Basic.NET 生成以编程方式在 ADO.NET 中的连接字符串
310083 如何: 使用 C#.NET 生成以编程方式在 ADO.NET 中的连接字符串
308075 如何: 使用数据链接文件与 OleDbConnection 在 Visual Basic.NET 中的对象

命令和参数

您可以使用命令来在服务器上运行的语句。Execute方法有几种变体:
  • ExecuteNonQuery。无输出被正常。
  • ExecuteScalar。只有标量的结果,则返回。
  • ExecuteReader。返回的记录的流。
  • SqlCommandExecuteXml 。从 SQL Server 的 XML 中返回一个 System.Xml.XmlReader 对象,查询。
若要控制命令的执行,要么编码中的数据该 SQL 语句,或包含通过参数对象的数据。首选的方法是使用参数,因为此操作不需要转义分隔符和其他特殊字符,则可能会导致无效的 SQL 脚本。此外,SqlClient.NET 数据提供程序将绑定按名称的参数。因此,您可以重新使用在 SQL 脚本中,参数和不需要多次发送的数据。

您还可以阅读输出参数中返回的数据。但是,如果该命令返回将DataReader,则必须关闭Dispose方法上DataReader之前调用可以访问输出参数值。因为服务器发送的数据流,结尾处的输出参数的值您必须清除或其他方式的处理的中间数据。

如果您添加SqlCommandOleDbCommand组件到您的应用程序 (在数据库选项卡) 上的工具箱中,您可以在设计时,通过编辑其属性属性窗口并创建该命令通过图形设计器。

Visual Studio.NET 的联机帮助文档
执行命令
http://msdn.microsoft.com/en-us/library/tyy0sz6b.aspx

一个命令中使用的存储的过程
http://msdn.microsoft.com/en-us/library/yy6y35y8 (v=vs.71).aspx

从数据库中获取单个值
http://msdn.microsoft.com/en-us/library/hdt3k85x (v=vs.71).aspx

从数据库中获取 BLOB 值
http://msdn.microsoft.com/en-us/library/87z0hy49 (v=vs.71).aspx

执行目录操作
http://msdn.microsoft.com/en-us/library/ye97aks6 (v=vs.71).aspx

修改数据库中的数据
http://msdn.microsoft.com/en-us/library/3btz0xwf (v=vs.71).aspx

以 XML 形式从 SQL Server 中获取数据
http://msdn.microsoft.com/en-us/library/ke345d80 (v=vs.71).aspx
演练

在帮助索引中,键入 演练中,数据然后选择下面的主题:
演练: 更新数据在 Web 窗体中使用数据库更新查询
Microsoft 知识库文章
301075 如何: 连接到数据库并使用 ADO.NET 和 Visual Basic.NET 时运行命令
306636 如何: 连接到数据库并使用 ADO.NET 和 C#.NET 运行命令
308049 如何: 通过使用 ADO.NET 和 Visual Basic.NET 函数调用参数化存储的过程
310070 如何: 通过使用 ADO.NET 和 C#.NET 调用参数化的存储的过程
310071 如何: 通过使用 ADO.NET 和 Visual C++.NET 调用参数化的存储的过程
309486 如何: 执行参数化的 SQL 存储过程通过使用 ODBC.NET 提供程序和 Visual Basic.NET
310130 如何: 执行参数化的 SQL 存储过程通过使用 ODBC.NET 提供程序和 C#.NET
310142 如何: 执行参数化的 SQL 存储过程通过使用 ODBC.NET 提供程序和 C#.NET
305079 如何: 创建一个 SQL Server 数据库以编程方式使用 ADO.NET 和 Visual Basic.NET
307283 如何: 创建一个 SQL Server 数据库以编程方式使用 ADO.NET 和 C#.NET
307402 如何: 创建一个 SQL Server 数据库以编程方式使用 ADO.NET 和 Visual C++.NET
单击此处可查看有关命令的如何文章的列表

交易记录

在数据访问对象 (DAO),远程数据对象 (RDO),或ActiveX 数据对象 (ADO) 您使用数据库连接对象的方法来控制事务状态。在.NET 数据提供程序,则使用事务对象来控制事务状态。

若要创建事务对象,使用BeginTransaction连接对象的方法。若要提交或回滚事务时,可以使用事务对象的方法。因为某些 OLE DB 提供程序,如 Microsoft Jet)支持嵌套的事务, OleDbTransaction对象包括返回另一个具有更多的本地范围的事务对象的开始的方法。

在创建事务对象时,您可以指定事务隔离级别。如果您使用而不是默认的事务隔离级别,您的代码可能会读取未提交的数据意外。此外,您的代码可能会产生过多在服务器上锁定。

必须将事务对象分配给命令以使该命令以参与事务的事务属性。如果该数据库不存在支持多个事务在同一连接上,您将收到一个异常当您尝试运行一个命令,不参与事务处理期间交易记录中。

您还可以向控件运行 SQL 语句在服务器上的事务。但是,不要混合使用与事务对象的 SQL 语句。您可能会遇到意外的行为。

Visual Studio.NET 的联机帮助文档
执行事务
http://msdn.microsoft.com/en-us/library/777e5ebh (v=vs.80).aspx

隔离级别枚举
http://msdn.microsoft.com/en-us/library/system.data.isolationlevel (v=vs.71).aspx
Microsoft 知识库文章

单击此处可查看有关交易记录的如何文章的列表

DataReader

DataReader对象用于从数据库服务器中读取记录。使用Command.ExecuteReader方法来创建DataReader对象。DataReader可以处理这两个多个结果集层次结构和分段结果集。DataReader使用服务器端、 只进/只读游标。通常情况下, DataReader缓冲整条记录。但是,在Command.ExecuteReader方法中指定的标志,以便DataReader缓冲区只搜索当前字段,而使其他的更改更多的性能。

在任何给定的连接上一次只能有一个DataReader可以打开。与 ADO 不同,ADO.NET 不会打开其他连接,如果对被阻止的连接运行此脚本。您收到的是异常。

您可以将绑定 Web因为该网页按顺序生成窗体控件添加到DataReader 。但是,您不能将 Windows 窗体控件绑定到DataReader ,因为 Windows 窗体控件需要一个可滚动的游标和改为绑定到数据集

您不能从DataReader访问基础的命令连接对象。因此,如果将DataReader传递给不受信任的组件,该组件不能运行根据服务器的恶意命令。如果希望DataReader自动关闭连接时,该组件将其关闭,请在Command.ExecuteReader方法中设置了CloseConnection标志。

不能传递DataReader从当前应用程序域。如果您想要将数据传递到另一个过程中,使用数据集。或者,传递出在连接字符串和命令文本,然后允许其他应用程序创建DataReader本地。

Visual Studio.NET 的联机帮助文档
使用 DataReader 检索数据
http://msdn.microsoft.com/en-us/library/haa3afyz (v=vs.71).aspx

一个命令中使用的存储的过程
http://msdn.microsoft.com/en-us/library/yy6y35y8 (v=vs.71).aspx

CommandBehavior 枚举
http://msdn.microsoft.com/en-us/library/system.data.commandbehavior (v=vs.71).aspx
Microsoft 知识库文章
308278 如何: 检索并使用 ASP.NET,ADO.NET,Visual Basic.NET 中显示 Access 数据库中的记录
308100 如何: 检索并使用 ASP.NET、 ADO.NET,和 C#.NET 显示 Access 数据库中的记录
309490 如何: 通过在 Visual Basic.NET 中使用 DataReader 中处理多个结果
311274 如何: 通过使用 C#.NET 中的 DataReader 来处理多个结果
308045 如何: 在 Visual Basic.NET 将 DataReader 中使用 ADO 的形状命令
309130 如何: 使用 DataReader C#.NET 中使用 ADO 的形状命令
310108 如何: 通过使用 DataReader GetSchemaTable 方法,Visual Basic.NET 中检索列模式
310107 如何: 通过使用 DataReader GetSchemaTable 方法,C#.NET 中检索列架构
309683 如何: 通过使用 DataReader GetSchemaTable 方法,Visual C++.NET 中检索列模式
310348 如何: 在 Visual Basic.NET 中使用 DataReader 时避免装箱问题
312855 如何: 在 C#.NET 中使用 DataReader 时避免装箱问题
单击此处可查看有关 DataReader 的如何文章的列表

错误处理

数据提供程序引发的错误的特殊的例外情况:
  • Sqlexception:
  • OleDbException
  • OdbcException
您可以使用这些类的属性获取扩展错误的信息。因为与相关联的 SqlClient.NET 数据提供程序SQL Server 提供更多特定于服务器的信息可在sqlexception:类比OleDbExceptionOdbcException类提供了。第三方.NET 数据提供程序都有其自己自定义异常类。

低严重性服务器错误或警告以消息的形式返回。若要处理这些低严重性服务器错误,请添加一个事件Connection.InfoMessage事件处理程序。其他类型的异常,如InvalidArgumentException,直接从.NET 数据提供程序,将引发类。

若要确定公开的每个异常,属性Visual Studio.NET 联机帮助中的异常类的查询。您还可以若要了解在内容下的某方法引发的异常的特定方法的查询情况。

若要确保不会泄漏昂贵的系统资源,关闭任何打开的连接DataReader对象中的异常处理程序的Finally子句。这些系统资源下一次垃圾回收过程中或在应用程序关闭时清除向下。但是,可能会出现资源池耗尽之前这段时间。

Visual Studio.NET 的联机帮助文档
Sqlexception: 类
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception (v=vs.71).aspx

SqlError 类
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlerror (v=vs.71).aspx

OleDbException 类
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbexception (v=vs.71).aspx

OleDbError 类
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledberror (v=vs.71).aspx
快速入门示例

作为的另一部分说明了错误处理快速入门示例。

Microsoft 知识库文章
308043 如何: 在 Visual Basic.NET 中使用 ADO.NET 获取基础提供程序错误
308650 如何: 通过使用 C#.NET 中的 ADO.NET 获取基础提供程序错误
308651 如何: 通过使用 Visual C++.NET 中的 ADO.NET 获取基础提供程序错误

特定于数据库的

某些数据库需要特殊的技术来执行某些操作。本部分列出了一些较为常见的情景。

Microsoft 知识库文章
308071 如何: 通过使用 OleDbDataReader,Visual Basic.NET 访问 Oracle 数据库
308448 如何: 通过使用 OLE DB.NET 数据提供程序和 C#.NET 访问 Oracle 数据库
308073 如何: 针对 Oracle 使用 DataReader Visual Basic.NET 中存储过程
309361 如何: 针对 Oracle 使用 DataReader C#.NET 中存储过程
309362 如何: 针对 Oracle 使用 DataReader Visual C++.NET 中存储过程
单击此处可查看有关 Oracle 的操作方法文章的列表

获得.NET 数据提供程序的独立性

DAO 和 Jet 最小化不同的数据库之间的差异系统。因此,您可以移植到另一个数据库中的应用程序用很少的更改。RDO 和 ADO 中删除对更好地 Jet 中介性能并公开更多的特定于服务器的功能。但是,这使端口的应用程序的数据库之间更困难。

ADO.NET 提高性能,尽管 ADO.NET 包括单独的类每个.NET 数据提供程序。但是,您可以使用标准接口和隔离为尽量减少代码量的"工厂"函数初始化代码您必须更改。此外,数据集对象提供了用于数据绑定和远程处理的中心对象这就是独立于提供程序的。

Visual Studio.NET 的联机帮助文档
编写.NET 数据提供程序的常见代码
http://msdn.microsoft.com/en-us/library/aa720704 (v=vs.71).aspx
Microsoft 知识库文章
308046 如何: 使用基类,这些类来减少分叉与在 Visual Basic.NET 中的托管提供程序的代码
313304 如何: 使用基类可以减少代码使用 C#.NET 分叉

编写.NET 数据提供程序

如果您编写.NET 数据提供程序,您可以为其访问数据没有 OLE DB 提供程序或 ODBC 驱动程序。您还可以编写数据提供程序它专为特定数据库。

因为数据提供程序操作数据集(与 ADO记录集,其操作 OLE DB 提供程序) 不同,存在不一致性要求。您可以编写一个函数来读取数据和将数据添加到数据集。或者,您可以编写更完整数据提供程序的连接对象,等等。

Visual Studio.NET 的联机帮助文档
实现.NET 数据提供程序
http://msdn.microsoft.com/en-us/library/4ksaf9z5 (v=vs.71).aspx

实现连接
http://msdn.microsoft.com/en-us/library/6sc13hd1 (v=vs.71).aspx

执行命令
http://msdn.microsoft.com/en-us/library/efdwa0z6 (v=vs.71).aspx

实现将 DataReader
http://msdn.microsoft.com/en-us/library/5awcy9t0 (v=vs.71).aspx

实施 DataAdapter
http://msdn.microsoft.com/en-us/library/08a1x80z (v=vs.71).aspx

示例.NET 数据提供程序
http://msdn.microsoft.com/en-us/library/26xsd945 (v=vs.71).aspx
MSDN 文章
ADO.NET: 构建自定义数据提供程序用于.NET 数据访问框架 (MSDN 杂志
http://msdn.microsoft.com/en-us/magazine/cc301611.aspx

故障排除

如果您遇到了问题并且需要回答您的问题,请查阅 MSDN 新闻组。MSDN 新闻组所获得的最佳位置问题的答案。在 MSDN 新闻组中,您可以共享您与对等方或搜索 Microsoft 知识库文章的体验有关具体问题。
MSDN 新闻组
http://msdn.microsoft.com/newsgroups/

Microsoft 知识库文章
http://support.microsoft.com/search

属性

文章编号: 313480 - 最后修改: 2013年6月28日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft ADO.NET 1.1
关键字:?
kbarttyperoadmap kbinfo kboracle kbsqlclient kbsystemdata kbmt KB313480 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 313480
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com