ADO.NET 结构

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

ADO.NET 组件

可以使用 ADO.NET 的两个组件来访问和处理数据:

  • .NET Framework 数据提供程序

  • DataSet

.NET Framework 数据提供程序

.NET Framework 数据提供程序是专门为数据处理以及快速地只进、只读访问数据而设计的组件。Connection 对象提供与数据源的连接。Command 对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader 从数据源中提供高性能的数据流。最后,DataAdapter 提供连接 DataSet 对象和数据源的桥梁。DataAdapter 使用 Command 对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet 中数据的更改与数据源保持一致。

DataSet

ADO.NET DataSet 专门为独立于任何数据源的数据访问而设计。因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及有关 DataTable 对象中数据的主键、外键、约束和关系信息组成。

下图说明 .NET Framework 数据提供程序与 DataSet 之间的关系。

ADO.NET 结构


图片:数据提供程序

选择 DataReader 或 DataSet

在决定应用程序应使用 DataReader(请参见使用 DataReader 检索数据)还是应使用 DataSet(请参见在 ADO.NET 中使用 DataSet)时,应考虑应用程序所需的功能类型。DataSet 用于执行以下功能:

  • 在应用程序中将数据缓存在本地,以便可以对数据进行处理。如果只需要读取查询结果,DataReader 是更好的选择。

  • 在层间或从 XML Web 服务对数据进行远程处理。

  • 与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。

  • 对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。

如果不需要 DataSet 所提供的功能,则可以使用 DataReader 以只进、只读方式返回数据,从而提高应用程序的性能。虽然 DataAdapter 使用 DataReader 来填充 DataSet 的内容(请参见从 DataAdapter 填充 DataSet),但可以使用 DataReader 来提高性能,因为这样可以节省 DataSet 所使用的内存,并将省去创建 DataSet 并填充其内容所需的处理。

XML 和 ADO.NET

ADO.NET 利用 XML 的力量来提供对数据的断开式访问。ADO.NET 的设计与 .NET Framework 中 XML 类的设计是并进的,它们都是同一个结构的组件。

ADO.NET 和 .NET Framework 中的 XML 类集中于 DataSet 对象。无论 XML 源是文件还是 XML 流,都可以用来填充 DataSet。无论 DataSet 中数据的数据源是什么,DataSet 都可以作为符合万维网联合会 (W3C) 标准的 XML 进行编写,并且将其架构包含为 XML 架构定义语言 (XSD) 架构。由于 DataSet 固有的序列化格式为 XML,因此是在层间移动数据出色的媒介,这使 DataSet 成为在远程向 XML Web 服务发送数据和架构上下文以及从 XML Web 服务接收数据和架构上下文的最佳选择。


提示:ADO.NET 类在 System.Data.dll 中,并且与 System.Xml.dll 中的 XML 类集成。当编译使用 System.Data 命名空间的代码时,请引用 System.Data.dll 和 System.Xml.dll




转载:https://msdn.microsoft.com/zh-cn/library/27y4ybxw(v=vs.80).aspx

1.Connection 对象

ADO Connection 对象用于创建一个到达某个数据源的开放连接。通过此连接,您可以对一个数据库进行访问和操作。

如果需要多次访问某个数据库,您应当使用 Connection 对象来建立一个连接。您也可以经由一个 Command 或 Recordset 对象传递一个连接字符串来创建某个连接。不过,此类连接仅仅适合一次具体的简单的查询。

属性

属性 描述
Attributes 设置或返回 Connection 对象的属性。
CommandTimeout 指示在终止尝试和产生错误之前执行命令期间需等待的时间。
ConnectionString 设置或返回用于建立连接数据源的细节信息。
ConnectionTimeout 指示在终止尝试和产生错误前建立连接期间所等待的时间。
CursorLocation 设置或返回游标服务的位置。
DefaultDatabase 指示 Connection 对象的默认数据库。
IsolationLevel 指示 Connection 对象的隔离级别。
Mode 设置或返回 provider 的访问权限。
Provider 设置或返回 Connection 对象提供者的名称。
State 返回一个描述连接是打开还是关闭的值。
Version 返回 ADO 的版本号。

方法

方法 描述
BeginTrans 开始一个新事务。
Cancel 取消一次执行。
Close 关闭一个连接。
CommitTrans 保存任何更改并结束当前事务。
Execute 执行查询、SQL 语句、存储过程或 provider 具体文本。
Open 打开一个连接。
OpenSchema 从 provider 返回有关数据源的 schema 信息。
RollbackTrans 取消当前事务中所作的任何更改并结束事务。

事件

注释:您无法使用 VBScript or JScript 来处理事件(仅能使用 Visual Basic、Visual C++ 以及 Visual J++ 语言处理事件)。

事件 描述
BeginTransComplete 在 BeginTrans 操作之后被触发。
CommitTransComplete 在 CommitTrans 操作之后被触发。
ConnectComplete 在一个连接开始后被触发。
Disconnect 在一个连接结束之后被触发。
ExecuteComplete 在一条命令执行完毕后被触发。
InfoMessage 假如在一个 ConnectionEvent 操作过程中警告发生,则触发该事件。
RollbackTransComplete 在 RollbackTrans 操作之后被触发。
WillConnect 在一个连接开始之前被触发。
WillExecute 在一条命令被执行之前被触发。

集合

集合 描述
Errors 包含 Connection 对象的所有 Error 对象。
Properties 包含 Connection 对象的所有 Property 对象。


2.Command 对象

ADO Command 对象用于执行面向数据库的一次简单查询。此查询可执行诸如创建、添加、取回、删除或更新记录等动作。

如果该查询用于取回数据,此数据将以一个 RecordSet 对象返回。这意味着被取回的数据能够被 RecordSet 对象的属性、集合、方法或事件进行操作。

Command 对象的主要特性是有能力使用存储查询和带有参数的存储过程。

属性

属性 描述
ActiveConnection 设置或返回包含了定义连接或 Connection 对象的字符串。
CommandText 设置或返回包含提供者(provider)命令(如 SOL 语句、表格名称或存储的过程调用)的字符串值。默认值为 ""(零长度字符串)。
CommandTimeout 设置或返回长整型值,该值指示等待命令执行的时间(单位为秒)。默认值为 30。
CommandType 设置或返回一个 Command 对象的类型
Name 设置或返回一个 Command 对象的名称
Prepared 指示执行前是否保存命令的编译版本(已经准备好的版本)。
State 返回一个值,此值可描述该 Command 对象处于打开、关闭、连接、执行还是取回数据的状态。

方法

方法 描述
Cancel 取消一个方法的一次执行。
CreateParameter 创建一个新的 Parameter 对象
Execute 执行 CommandText 属性中的查询、SQL 语句或存储过程。

集合

集合 描述
Parameters 包含一个 Command 对象的所有 Parameter 对象。
Properties 包含一个 Command 对象的所有 Property 对象。

3.DataReader对象

DataReader对象只允许以只读、顺向的方式查看其中所存储的数据,提供一个非常有效率的数据查看模式,同时DataReader对象还是一种非常节省资源的数据对象。
DataReader对象可通过Command对象的ExecuteReader方法从数据源中检索数据来创建。
DataReader对象常用属性如下表所示:
属性

属性

描述

FieldCount 

只读,表示纪录中有多少字段

HasMoreResults 

表示是否有多个结果

HasMoreRows

只读,表示是否还有资料未读取

IsClosed

只读,表示DataReader 是否关闭

Item

只读,本对象是集合对象,以键值(Key)或索引值(Index)的方式取得纪录中某个字段的数据

RowFetchCount

用来设定一次取回多少笔记录,预设为值为

DataReader对象常用方法如下表所示:
方法

方法

描述

Close

DataReader 对象关闭

GetDataTypeName

取得指定字段的数据型态

GetName

取得指定字段的字段名称

GetOrdinal

取得指定字段名称在纪录中的顺序

GetValue

取得指定字段的数据

GetValues

取得全部字段的数据

IsNull 

用来判断字段内是否为Null 

NextResult

用来和SQL Script 搭配使用,表示取得下一个结果

Read 

DataReader 读取下一笔记录,如果有读到数据则传回True,若没有纪录则传回False


  示例
	//连接数据库
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=(local);Integrated Security=SSPI;Initial Catalog=db_showHouse";
//打开连接
conn.Open();
SqlCommand cmd = new SqlCommand("select User_names from tb_User", conn);
SqlDataReader dr =cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
MessageBox.Show(dr[0].ToString());
}
}
dr.Close();

    4. DataSet 对象
DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。
属性

属性

描述

CaseSensitive

用于控制DataTable中的字符串比较是否区分大小写。

DataSetName

当前DataSet的名称。如果不指定,则该属性值设置为"NewDataSet"。如果将DataSet内容写入XML文件,DataSetNameXML文件的根节点名称。

DesignMode

如果在设计时使用组件中的DataSetDesignMode返回True,否则返回False

HasErrors

表示DataSet中 的DataRow对象是否包含错误。如果将一批更改提交给数据库并将DataAdapter对象的ContinueUpdateOnError属性设置为 True,则在提交更改后必须检查DataSetHasErrors属性,以确定是否有更新失败。

NameSpacePrefix

指定XML命名空间和前缀

Relations

返回一个DataRelationCollection对象。

Tables

检查现有的DataTable对象。通过索引访问DataTable有更好的性能。

方法

方法

描述

AcceptChanges

接受或放弃DataSet中所有挂起更改。调用AcceptChanges时,RowState属性值为AddedModified的所有行的 RowState属性都将被设置为UnChanged.任何标记为DeletedDataRow对象将从DataSet中删除

RejectChanges

调用 RejectChanges时,任何标记为AddedDataRow对象将会被从DataSet中删除,其他修改过的DatRow对象将返回前一状态。

Clear

清除DataSet中所有DataRow对象。该方法比释放一个DataSet然后再创建一个相同结构的新DataSet要快。

Clone

使用Copy方法会创建与原DataSet具有相同结构和相同行的新DataSet

Copy

使用Clone方法会创建具有相同结构的新DataSet,但不包含任何行。

GetChanges

返回与原DataSet对象具有相同结构的新DataSet,并且还包含原DataSet中所有挂起更改的行。

GetXml

使用GetXml方法得到由DataSet的内容与她的架构信息转换为XML格式后的字符串

GetXmlSchema

返回架构信息

HasChange

表示DataSet中是否包含挂起更改的DataRow对象。

Merge

从另一个DataSetDataTable或现有DataSet中的一组DataRow对象载入数据。

ReadXml

使用ReadXml方法从文件、TextReader、数据流或者XmlReader中将XML数据载入DataSet

Reset

DataSet返回为未初始化状态。如果想放弃现有DataSet并且开始处理新的DataSet,使用Reset方法比创建一个DataSet的新实例好。


5.DataAdapter 对象
DataAdapter提供连接DataSet对象和数据源的桥梁。DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet中数据的更改与数据源保持一致。
DataAdapter通过映射Fill() 方法来更改DataSet中的数据以便与数据源中的数据匹配,通过Update()方法来更改数据源中的数据以便与DataSet中的数据匹配。
属性

名称

描述

AcceptChangesDuringFill

获取或设置一个值,该值指示在任何 Fill 操作过程中,在将AcceptChanges 添加到 DataTable 之后是否在 DataRow 上调用它。

AcceptChangesDuringUpdate

获取或设置在 Update 期间是否调用 AcceptChanges

CanRaiseEvents

获取一个指示组件是否可以引发事件的值。 (继承自Component。)

Container

获取 IContainer,它包含 Component。 (继承自Component。)

ContinueUpdateOnError

获取或设置一个值,该值指定在行更新过程中遇到错误时是否生成异常。

DesignMode

获取一个值,用以指示 Component 当前是否处于设计模式。(继承自 Component。)

Events

获取附加到此 Component 的事件处理程序的列表。 (继承自Component。)

FillLoadOption

获取或设置 LoadOption,后者确定适配器如何从DbDataReader 中填充 DataTable

MissingMappingAction

确定传入数据没有匹配的表或列时需要执行的操作。

MissingSchemaAction

确定现有 DataSet 架构与传入数据不匹配时需要执行的操作。

ReturnProviderSpecificTypes

获取或设置 Fill 方法是应当返回提供程序特定的值,还是返回公用的符合 CLS 的值。

Site

获取或设置 Component 的 ISite。 (继承自 Component。)

TableMappings

获取一个集合,它提供源表和 DataTable 之间的主映射。

方法

名称

描述

CreateTableMappings

创建一个新的 DataTableMappingCollection

Dispose()

释放由 Component 使用的所有资源。 (继承自Component。)

Dispose(Boolean)

释放由 DataAdapter 占用的非托管资源,还可以另外再释放托管资源。 (重写Component.Dispose(Boolean)。)

Equals(Object)

确定指定的对象是否等于当前对象。 (继承自Object。)

Fill(DataSet)

在 DataSet 中添加或刷新行以与数据源中的行匹配。

Fill(DataTable, IDataReader)

在 DataTable 中添加或刷新行以与使用 DataTable名称和指定的 IDataReader 的数据源中的行匹配。

Fill(DataTable[], IDataReader, Int32, Int32)

在 DataTable 对象集合的指定范围中添加或刷新行以与数据源中的行匹配。

Fill(DataSet, String, IDataReader, Int32, Int32)

在 DataSet 的指定范围中添加或刷新行以匹配使用DataSet 和 DataTable 名称的数据源中的行。

FillSchema(DataSet, SchemaType)

将 DataTable 添加到指定的 DataSet 中,并根据指定的 SchemaType 配置架构以匹配数据源中的架构。

FillSchema(DataTable, SchemaType, IDataReader)

向指定的 DataSet 添加一个 DataTable

FillSchema(DataSet, SchemaType, String, IDataReader)

向指定的 DataSet 添加一个 DataTable

Finalize

在通过垃圾回收将 Component 回收之前,释放非托管资源并执行其他清理操作。 (继承自Component。)

GetFillParameters

获取当执行 SQL SELECT 语句时由用户设置的参数。

GetHashCode

作为默认哈希函数。 (继承自 Object。)

GetLifetimeService

检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)

GetService

返回一个对象,该对象表示由 Component 或它的Container 提供的服务。 (继承自Component。)

GetType

获取当前实例的 Type。 (继承自 Object。)

HasTableMappings

指示是否已创建了一个DataTableMappingCollection

MemberwiseClone()

创建当前 Object 的浅表副本。 (继承自Object。)

MemberwiseClone(Boolean)

创建当前 MarshalByRefObject 对象的浅表副本。(继承自 MarshalByRefObject。)

OnFillError

当 Fill 过程中出现错误时调用。

ResetFillLoadOption

将 FillLoadOption 重置为默认状态,并使DataAdapter.Fill 接受AcceptChangesDuringFill

Update

从名为“Table”的 DataTable 为指定的 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。

CreateTableMappings

创建一个新的 DataTableMappingCollection

Dispose()

释放由 Component 使用的所有资源。 (继承自Component。)

Dispose(Boolean)

释放由 DataAdapter 占用的非托管资源,还可以另外再释放托管资源。 (重写Component.Dispose(Boolean)。)

Equals(Object)

确定指定的对象是否等于当前对象。 (继承自Object。)

Fill(DataSet)

在 DataSet 中添加或刷新行以与数据源中的行匹配。

Fill(DataTable, IDataReader)

在 DataTable 中添加或刷新行以与使用 DataTable名称和指定的 IDataReader 的数据源中的行匹配。

Fill(DataTable[], IDataReader, Int32, Int32)

在 DataTable 对象集合的指定范围中添加或刷新行以与数据源中的行匹配。

Fill(DataSet, String, IDataReader, Int32, Int32)

在 DataSet 的指定范围中添加或刷新行以匹配使用DataSet 和 DataTable 名称的数据源中的行。

FillSchema(DataSet, SchemaType)

将 DataTable 添加到指定的 DataSet 中,并根据指定的 SchemaType 配置架构以匹配数据源中的架构。

FillSchema(DataTable, SchemaType, IDataReader)

向指定的 DataSet 添加一个 DataTable

FillSchema(DataSet, SchemaType, String, IDataReader)

向指定的 DataSet 添加一个 DataTable

Finalize

在通过垃圾回收将 Component 回收之前,释放非托管资源并执行其他清理操作。 (继承自Component。)

GetFillParameters

获取当执行 SQL SELECT 语句时由用户设置的参数。

GetHashCode

作为默认哈希函数。 (继承自 Object。)

GetLifetimeService

检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)

GetService

返回一个对象,该对象表示由 Component 或它的Container 提供的服务。 (继承自Component。)

GetType

获取当前实例的 Type。 (继承自 Object。)

HasTableMappings

指示是否已创建了一个DataTableMappingCollection

MemberwiseClone()

创建当前 Object 的浅表副本。 (继承自Object。)

MemberwiseClone(Boolean)

创建当前 MarshalByRefObject 对象的浅表副本。(继承自 MarshalByRefObject。)

OnFillError

当 Fill 过程中出现错误时调用。

ResetFillLoadOption

将 FillLoadOption 重置为默认状态,并使DataAdapter.Fill 接受AcceptChangesDuringFill

Update

从名为“Table”的 DataTable 为指定的 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。


转载:https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldataadapter(v=vs.110).aspx


转载:http://www.w3school.com.cn/ado/ado_ref_command.asp

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值