第一,DataReader
DataReader
DataReader对象是一个简单的数据集,用于从数据源中检索只读数据集,常用于检索大量数据。DataReader对象只允许以只读、顺向的方式查看其中所存储的数据,提供一个非常有效率的数据查看模式,同时DataReader对象还是一种非常节省资源的数据对象。 DataReader对象可通过Command对象的ExecuteReader方法从数据源中检索数据来创建。DataReader属性
DataReader对象常用属性如下表所示: FieldCount 只读,表示纪录中有多少字段 HasMoreResults 表示是否有多个结果,本属性和SQL Script 搭配使用。 HasMoreRows 只读,表示是否还有资料未读取 IsClosed 只读,表示DataReader 是否关闭 Item 只读,本对象是集合对象,以键值(Key)或索引值(Index)的方式取得纪录中某个字段的数据 RowFetchCount 用来设定一次取回多少笔记录,预设为值为1 笔DataReader方法
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();SqlCommandcmd = new SqlCommand("select User_names from tb_User", conn);SqlDataReader drNew = cmd.ExecuteReader();if (drNew.HasRows){while (drNew.Read()){MessageBox.Show(drNew[0].ToString());}}drNew.Close();
第二,DataSet
DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不在依赖于数据库链路
正是由于DataSet才使得程序员在编程时可以屏蔽数据库之间的差异,从而获得一致的编程模型。DataSet支持多表、表间关系、数据约束等,和关系数据库的模型基本一致。 DataSet 是ADO.NET 结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成,您可使这些对象与 DataRelation 对象互相关联。您还可通过使用 UniqueConstraint 和 ForeignKeyConstraint 对象在 DataSet 中实施数据完整性。有关使用 DataSet 对象的详细信息,请参见 在 ADO.NET 中使用 DataSet。 尽管 DataTable 对象中包含数据,但是 DataRelationCollection 允许您遍览表的层次结构。这些表包含在通过 Tables 属性访问的 DataTableCollection 中。当访问 DataTable 对象时,请注意它们是按条件区分大小写的。例如,如果一个 DataTable 被命名为“mydatatable”,另一个被命名为“Mydatatable”,则用于搜索其中一个表的字符串被认为是区分大小写的。但是,如果“mydatatable”存在而“Mydatatable”不存在,则认为该搜索字符串不区分大小写。有关使用 DataTable 对象的更多信息,请参见 创建 DataTable。 DataSet 可将数据和架构作为 XML 文档进行读写。数据和架构可通过 HTTP 传输,并在支持 XML 的任何平台上被任何应用程序使用。可使用 WriteXmlSchema 方法将架构保存为 XML 架构,并且可以使用 WriteXml 方法保存架构和数据。若要读取既包含架构也包含数据的 XML 文档,请使用 ReadXml 方法。 在典型的多层实现中,用于创建和刷新 DataSet 并依次更新原始数据的步骤包括: 通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable。 通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。 调用 GetChanges 方法以创建只反映对数据进行的更改的第二个 DataSet。 调用 DataAdapter 的 Update 方法,并将第二个 DataSet 作为参数传递。 调用 Merge 方法将第二个 DataSet 中的更改合并到第一个中。 针对 DataSet 调用 AcceptChanges。或者,调用 RejectChanges 以取消更改。 需要注意是是:dataset所有数据都加载在内存上执行的,可以提高数据访问速度,提高硬盘数据的安全性。极大的改善了程序运行的速度和稳定性。
ADO.NET的DataSet数据模型
因为DataSet可以看做是内存中的数据库,也因此可以说DataSet是数据表的集合,它可以包含任意多个数据表(DataTable),而且每一 DataSet中的数据表(DataTable对应一个数据源中的数据表(Table)或是数据视图(View)。数据表实质是由行(DataRow)和 列(DataColumn)组成的集合为了保护内存中数据记录的正确性,避免并发访问时的读写冲突,DataSet对象中的DataTable负着维护每 一条记录,分别保存记录的初始状态和当前状态。从这里可以看出DataSet是与只能存放单张数据表的Recordset是截然不同的概念。 DataSet对象结构还是非常复杂的,在DataSet对象的下一层中是DataTableCollection对象、 DataRelationCollection对象和ExtendedProperties对象。上文已经说过,每一个DataSet对象是由若干个 DataTable对象组成。DataTableCollection就是管理DataSet中的所有DataTable对象。表示DataSet中两个 DataTable对象之间的父/子关系是DataRelation对象。它使一个DataTable 中的行与另一个DataTable中的行相关联。这种关联类似于关系数据库中数据表之间的主键列和外键列之间的关联。 DataRelationCollection对象就是管理DataSet中所有DataTable之间的DataRelation关系的。在 DataSet中DataSet、DataTable和DataColumn都具有ExtendedProperties属性。 ExtendedProperties其实是一个属性集(PropertyCollection),用以存放各种自定义数据,如生成数据集的SELECT 语句等。DataSet对象的三大特性
通过上面几节中的介绍和本节中的分析,我们可以总结出DataSet对象的三大特性: (1) 独立性。DataSet独立于各种数据源。 (2) 离线(断开)和连接。 (3) DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。DataSet使用方法
在实际应用中,DataSet使用方法一般有三种: (1) 把数据库中的数据通过DataAdapter对象填充DataSet。 (2) 通过DataAdapter对象操作DataSet实现更新数据库。 (3) 把XML数据流或文本加载到DataSet。 第三,DataAdapeter
适配器.
DataAdapter
表示一组 SQL 命令和一个数据库连接,它们用于填充 DataSet和更新数据源。 命名空间:System.Data.Common 程序集:System.Data(在 system.data.dll 中)语法
public class DataAdapter : Component, IDataAdapter
备注
DataAdapter 用作 DataSet 和数据源之间的桥接器以便检索和保存数据。 DataAdapter 通过映射Fill(这更改了 DataSet 中的数据以便与数据源中的数据相匹配)和Update(这更改了数据源中的数据以便与 DataSet 中的数据相匹配)来提供这一桥接器。 如果所连接的是 SQL Server 数据库,则可以通过将SqlDataAdapter与关联的SqlCommand和SqlConnection对象一起使用,从而提高总体性能。对于支持 OLE DB 的数据源,请使用 DataAdapter 及其关联的OleDbCommand和 OleDbConnection 对象。对于支持 ODBC 的数据源,请使用 DataAdapter 及其关联的OdbcCommand和OdbcConnection对象。对于 Oracle 数据库,请使用 DataAdapter 及其关联的OracleCommand和OracleConnection对象。 当创建 DataAdapter 的实例时,读/写属性将被设置为初始值。有关这些值的列表,请参见 DataAdapter 构造函数。