以前,数据处理主要依赖于基于连接的双层模型。当数据处理越来越多地使用多层结构时,程序员正在向断开方式转换,以便为他们的应用程序提供更佳的可缩放性。
可以使用 ADO.NET 的两个组件来访问和处理数据:
.NET Framework 数据提供程序
DataSet
.NET Framework 数据提供程序是专门为数据处理以及快速地只进、只读访问数据而设计的组件。Connection 对象提供与数据源的连接。Command 对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader 从数据源中提供高性能的数据流。最后,DataAdapter 提供连接 DataSet 对象和数据源的桥梁。DataAdapter 使用 Command 对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet 中数据的更改与数据源保持一致。
ADO.NET DataSet 专门为独立于任何数据源的数据访问而设计。因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及有关 DataTable 对象中数据的主键、外键、约束和关系信息组成。
下图说明 .NET Framework 数据提供程序与 DataSet 之间的关系。
ADO.NET 结构
在决定应用程序应使用 DataReader(请参见使用 DataReader 检索数据)还是应使用 DataSet(请参见在 ADO.NET 中使用 DataSet)时,应考虑应用程序所需的功能类型。DataSet 用于执行以下功能:
在应用程序中将数据缓存在本地,以便可以对数据进行处理。如果只需要读取查询结果,DataReader 是更好的选择。
在层间或从 XML Web 服务对数据进行远程处理。
与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。
对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。
如果不需要 DataSet 所提供的功能,则可以使用 DataReader 以只进、只读方式返回数据,从而提高应用程序的性能。虽然 DataAdapter 使用 DataReader 来填充 DataSet 的内容(请参见从 DataAdapter 填充 DataSet),但可以使用 DataReader 来提高性能,因为这样可以节省 DataSet 所使用的内存,并将省去创建 DataSet 并填充其内容所需的处理。
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
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 对象。 |
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 对象。 |
属性 |
描述 |
FieldCount |
只读,表示纪录中有多少字段 |
HasMoreResults |
表示是否有多个结果 |
HasMoreRows |
只读,表示是否还有资料未读取 |
IsClosed |
只读,表示DataReader 是否关闭 |
Item |
只读,本对象是集合对象,以键值(Key)或索引值(Index)的方式取得纪录中某个字段的数据 |
RowFetchCount |
用来设定一次取回多少笔记录,预设为值为1 笔 |
方法 |
描述 |
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();
属性 |
描述 |
CaseSensitive |
用于控制DataTable中的字符串比较是否区分大小写。 |
DataSetName |
当前DataSet的名称。如果不指定,则该属性值设置为"NewDataSet"。如果将DataSet内容写入XML文件,DataSetName是XML文件的根节点名称。 |
DesignMode |
如果在设计时使用组件中的DataSet,DesignMode返回True,否则返回False。 |
HasErrors |
表示DataSet中 的DataRow对象是否包含错误。如果将一批更改提交给数据库并将DataAdapter对象的ContinueUpdateOnError属性设置为 True,则在提交更改后必须检查DataSet的HasErrors属性,以确定是否有更新失败。 |
NameSpace和Prefix |
指定XML命名空间和前缀 |
Relations |
返回一个DataRelationCollection对象。 |
Tables |
检查现有的DataTable对象。通过索引访问DataTable有更好的性能。 |
方法 |
描述 |
AcceptChanges |
接受或放弃DataSet中所有挂起更改。调用AcceptChanges时,RowState属性值为Added或Modified的所有行的 RowState属性都将被设置为UnChanged.任何标记为Deleted的DataRow对象将从DataSet中删除 |
RejectChanges |
调用 RejectChanges时,任何标记为Added的DataRow对象将会被从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 |
从另一个DataSet、DataTable或现有DataSet中的一组DataRow对象载入数据。 |
ReadXml |
使用ReadXml方法从文件、TextReader、数据流或者XmlReader中将XML数据载入DataSet中 |
Reset |
将DataSet返回为未初始化状态。如果想放弃现有DataSet并且开始处理新的DataSet,使用Reset方法比创建一个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