[分享]ADO.NET访问数据库详解(和大家一起提高)
- 格式:doc
- 大小:35.00 KB
- 文档页数:11
[分享]访问数据库详解(和大家一起提高)
我发现有很多人对认识很模糊,特整理一下文章,希望和大家一起进步!!! 概述 提供对Microsoft SQL Server 等数据源以及通过OLE DB 和XML 公开的数据源的一致访问。
数据共享使用者应用程序可以使用 来连接到这些数据源,并检索、操作和更新数据。
有效地从数据操作中将数据访问分解为多个可以单独使用或一前一后使用的不连续组件。
包含用于连接到数据库、执行命令和检索结果的.NET 数据提供程序。
您可以直接处理检索到的结果,或将其放入 DataSet 对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。
DataSet 对象也可以独立于.NET 数据提供程序使用,以管理应用程序本地的数据或源自XML 的数据。
结构以前,数据处理主要依赖于基于连接的双层模型。
当数据处理越来越多地使用多层结构时,程序员正在向断开方式转换,以便为他们的应用程序提供更佳的可缩放性。
借用XML 的力量来提供对数据的断开式访问。
的设计与.NET 框架中XML 类的设计是并进
的——它们都是同一个结构的组件。
和.NET 框架中的XML 类集中于DataSet 对象。
无论DataSet 是文件还是XML 流,它都可以使用来自XML 源的数据来进行填充。
无论DataSet 中数据的数据源是什么,DataSet 都可以写为符合WWW 联合会(W3C) 的XML,并且将其架构包含为XML 架构定义语言(XSD) 架构。
由于DataSet 固有的序列化格式为XML,它是在层间移动数据的优良媒介,这使DataSet 成为以远程方式向XML Web services 发送数据和架构上下文以及从XML Web services 接收数据和架构上下文的最佳选择。
设计 组件的目的是为了从数据操作中分解出数据访问。
完成此任务的是 的两个核心组件:DataSet 和.NET 数据提供程序,后者是一组包括Connection、Command、DataReader 和DataAdapter 对象在内的组件。
DataSet 是 的断开式结构的核心组件。
DataSet 的设计目的很明确:为了实现独立于任何数据源的数据访问。
因此,它可以用于多种不同的数据源,用于XML 数据,或用于管理应用程序本地的数据。
DataSet 包含一个或多个DataTable 对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关DataTable 对象中数据的关系信息组成。
结构的另一个核心元素是.NET 数据提供程序,其组件的设计目的相当明确:为了实现数据操作和对数据的快速、只进、只读访问。
Connection 对象提供与数据源的连接。
Command 对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。
DataReader 从数据源中提供高性能的数据流。
最后,DataAdapter 提供连接DataSet 对象和数据源的桥梁。
DataAdapter 使用Command 对象在数据源中执行SQL 命令,以便将数据加载到DataSet 中,并使对DataSet 中数据的更改与数据源保持一致。
可以为任何数据源编写.NET 数据提供程序。
.NET 框架附带了两个.NET 数据提供程序:SQL Server .NET 数据提供程序和OLE DB .NET 数据提供程序。
下图阐释了 结构的组件。
DataSet DataSet 对象是支持 的断开式、分布式数据方案的核心对象。
DataSet 是数据的内存驻留表示形式,无论数据源是什么,它都会提供一致的关系编程模型。
它可以用于多个不同的数据源,用于XML 数据,或用于管理应用程序本地的数据。
DataSet 表示包括相关表、约束和表间关系在内的整个数据集。
下图将显示DataSet 对象模型。
?
DataSet 中的方法和对象与关系数据库模型中的方法和对象一致。
DataSet 也可以按XML 的形式来保持和重新加载其内容,并按XML 架构定义语言(XSD) 架构的形式来保持和重新加载其架构。
使用 提供的通用接口,您可以编写一组在使用任何.NET 数据提供程序时都将运行的代码。
当编写将用于多个.NET 数据提供程序的代码时,请特别注意所使用的任何提供程序特定的语法。
例如,根据您所访问的数据源,SQL 语法将有所不同。
当更改为一个不同
的.NET 数据提供程序时,如果将SQL 命令隔离为字符串常数,则将使代码更易于维护。
另外,务必要保持在代码中创建参数的顺序。
对于SQL Server .NET 数据提供程序,参数使用名称来标识,因此参数顺序并不重要。
但是,OLE DB .NET 数据提供程序会按照参数添加到参数集合中的顺序来分配参数值。
因此,最好始终保持参数在代码中的顺序。
下面是C#的示例代码:
[C#]
// You can use either:
// IDbConnection myConn = new SqlConnection();
// or:
// IDbConnection myConn = new OleDbConnection(); IDbCommand myCommand = myConn.CreateCommand(); mandText = "SELECT * FROM Customers"; IDataReader myReader = myCommand.ExecuteReader(); while (myReader.Read())
Console.WriteLine("{0}\t{1}", myReader.GetString(0), myReader.GetString(1));
创建和使用DataSet DataSet 是数据的一种内存驻留表示形式,无论它包含的数据来自什么数据源,它都会提供一致的关系编程模型。
一个DataSet 表示整个数据集,其中包含对数据进行包含、排序和约束的表以及表间的关系。
使用DataSet 的方法有若干种,这些方法可以单独应用,也可以结合应用。
您可以:
在DataSet 中以编程方式创建DataTables、DataRelations 和Constraints 并使用数据填充这些表。
通过DataAdapter 用现有关系数据源中的数据表填充DataSet。
创建DataSet 可以通过调用DataSet 构造函数来创建DataSet 的实例。
请指定一个可选名称参数。
如果没有为DataSet 指定名称,则该名称会设置为“NewDataSet”。
也可以基于现有的DataSet 来创建新的DataSet。
新的DataSet 可以是:现有DataSet 的原样副本;DataSet 的复
本,它复制关系结构(即架构)但不包含现有DataSet 中的任何数据;或DataSet 的子集,它仅包含现有DataSet 中已使用GetChanges 方法修改的行。
以下代码示例演示如何构造DataSet 的实例。
[C#] DataSet custDS = new DataSet("CustomerOrders"); 向DataSet 添加DataTable 使您能够创建DataTable 对象并将其添加到现有DataSet 中。
可以使用要添加到DataTable 的Columns 集合中的DataColumn 对象的PrimaryKey 和Unique 属性来设置DataTable 的约束信息。
以下示例构造一个DataSet,将一个新的DataTable 对象添加到该DataSet 中,然后将三个DataColumn 对象添加到该表中。
最后,该代码将一个列设置为主键列。
[C#]
DataSet custDS = new DataSet("CustomerOrders"); DataTable ordersTable = custDS.Tables.Add("Orders"); DataColumn pkCol = ordersTable.Columns.Add("OrderID", typeof(Int32));
ordersTable.Columns.Add("OrderQuantity", typeof(Int32)); ordersTable.Columns.Add("CompanyName", typeof(string)); ordersTable.PrimaryKey = new DataColumn[] {pkCol};
创建和使用数据表DataSet 由表、关系和约束的集合组成。
在 中,DataTable 对象用于表示DataSet 中的
表。
DataTable 表示一个内存内关系数据的表;数据对于它驻留于其中的基于.NET 的应用程序来说是本地数据,但可从数据源(例如,使用DataAdapter 的Microsoft? SQL Server)中导入。
DataTable 类是“.NET 框架类库”中System.Data 命名空间的成员。
您可以独立创建和使用DataTable,或者可以将其用作DataSet 的成员,而且DataTable 对象也可以与其他.NET 框架对象(包括DataView)一起使用。
您可以通过DataSet 对象的Tables 属性来访问DataSet 中表的集合。
表的架构或结构由列和约束表示。
使用DataColumn 对象以及ForeignKeyConstraint 和UniqueConstraint 对象定义DataTable 的架构。
表中的列可以映射到数据源中的列、包含从表达式计算所得的值、自动递增它们的值,或包含主键值。
除架构以外,DataTable 还必须具有行,在其中包含数据并对数据排序。
DataRow 类表示表中包含的实际数据。
DataRow 及其属性和方法用于检索、计算和操作表中的数据。
在访问和更改行中的数据时,DataRow 对象会维护其当前状态和原始状态。
您可以使用表中的一个或多个相关的列来创建表与表之间
的父子关系。
DataTable 对象之间的关系可使用DataRelation
来创建。
然后,DataRelation 对象可用于返回某特定行的相关子行或父行。
创建数据表DataTable 表示一个内存内关系数据的表,可以独立创建和使用,也可以由其他.NET 框架对象使用,最常见的情况是作为DataSet 的成员使用。
DataTable 对象可通过使用DataTable 构造函数来创建,或者可通过将构造函数参数传递到DataSet 的Tables 属性的Add 方法(它是一个DataTableCollection)来创建。
DataTable 对象可通过使用DataAdapter 对象的Fill 方法或FillSchema 方法在DataSet 内创建,或者可使用DataSet 的ReadXml、ReadXmlSchema 或InferXmlSchema 方法从预定义的或推断的XML 架构中创建。
请注意,将DataTable 添加为一个DataSet 的Tables 集合的成员后,不能再将其添至任何其他DataSet 的表的集合。
最初创建DataTable 时,它是没有架构(结构)的。
要定义表的架构,必须创建DataColumn 对象并将其添至表的Columns 集合。
您也可以为表定义主键列,而且可以创建Constraint 对象并将其添至表的Constraints 集合。
在为DataTable 定义了架构之后,可通过将DataRow 对象添至表的Rows 集合来将数据行添加到表。
创建DataTable 时,不需要为TableName 属性提供值,您可以在其他时间指定属性,或者将其保留为空。
但是,在将
没有TableName 值的表添至DataSet 时,该表就会得到一个递增的默认名称TableN,此名称以“Table”开头,从Table0 开始。
注意建议您在提供TableName 值时避免使用“Table”或“TableN”的命名规则,因为您提供的名称可能会与DataSet 中现有的默认表名称冲突。
如果提供的名称已经存在,将引发异常。
以下示例创建DataTable 对象的实例,并为其指定名称“Customers”。
[C#]
DataTable workTable = new DataTable("Customers");
以下示例创建DataTable 实例,方法是:将其添至DataSet 的Tables 集合。
[C#]
DataSet custDS = new DataSet();
DataTable custTable = custDS.Tables.Add("CustTable");
创建和使用DataView DataView 使您能够创建DataTable
中所存储的数据的不同视图,这种功能通常用于数据绑定应用程序。
使用DataView,您可以公开表中具有不同排序顺序的数据,并且可以按行状态或基于筛选器表达式来筛选数据。
DataView 提供数据的动态视图,其内容、排序和成员关系
会实时反映对基础DataTable 的更改。
它不同于DataTable 的Select 方法,后者从表中按特定的筛选器和/或排序顺序返回DataRow 数组,虽然其内容反映对基础表的更改,但其成员关系和排序却则保持静态。
DataView 的动态功能使其成为数据绑定应用程序的理想选择。
与数据库提供的视图类似,DataView 为您提供了可向其应用不同排序和筛选条件的单个数据集的动态视图。
但是,DataView 和数据库视图之间相当不同的一点在于DataView 不能作为表来进行处理,并且不能提供联接表的视图。
另外,还不能排除存在于源表中的列,也不能追加不存在于源表中的列(如计算列)。
可以使用DataViewManager 来管理DataSet 中所有表的视图设置。
DataViewManager 为您提供了一种方便的方法来管理每个表的默认视图设置。
在将一个控件绑定到DataSet 的多个表时,绑定到DataViewManager 是理想的选择。
创建DataView 创建DataView 的方法有两种。
可以使用DataView 构造函数,也可以创建对DataTable 的DefaultView 属性的引用。
DataView 构造函数可以为空,也可以通过单个参数的形式采用DataTable 或者同时采用DataTable 与筛选条件、排序条件和行状态筛选器。
有关可与DataView 一起使用的附加参数的更多信息。
由于在创建DataView 时以及在修改任何Sort、RowFilter
或RowStateFilter 属性时都会生成DataView 的索引,所以当创建DataView 时,通过以构造函数参数的形式提供任何初始排序顺序或筛选条件,将实现最佳性能。
如果在不指定排序或筛选条件的情况下创建DataView,然后设置Sort、RowFilter 或RowStateFilter 属性,则会使索引生成至少二次:一次是在创建DataView 时,另一次是在修改任何排序或筛选属性时。
请注意,如果使用不采用任何参数的构造函数来创建DataView,那么在设置Table 属性之前,将无法使用DataView。
以下代码示例演示如何使用DataView 构造函数来创建DataView。
RowFilter、Sort 列和DataViewRowState 将与DataTable 一起提供。
[C#] DataView custDV = new
DataView(custDS.Tables["Customers"], "Country = 'USA'", "ContactName", DataViewRowState.CurrentRows); 以下代码演示如何使用该表的DefaultView 属性获取对DataTable 的默认DataView 的引用。
[C#] DataView custDV =
custDS.Tables["Customers"].DefaultView; 总结上面是
中的一些主要的特性,给大家参考一下。