毕业论文
些方法获得值类型,必须首先使用DbDataReader.IsDBNull检查空值;否则,空值将引发异常。检查空值是必须的,因为不管什么数据库类型都可以为空。这与.NET中的值类型不同,可为空的值类型(如int)在这种上下文环境中是不受支持的。
DbDataReader也能够获得关于它包含的数据的元信息—使用DbDataReader.GetSchema Table()方法,这样就可以知道列的名称、数据类型和其他信息,如列是否包含空值。
与前面的其他类一样,也有专门用于SQL Server的数据阅读器类,这就是SqlDataReader,本书将使用该类。该类继承DbDataReader,提供将数据读取为本地SQL类型的方法,这样就能够避免空类型的问题。这些类型包含在System.Data.Sqltypes命名空间中,是可为空的;如SqlDouble和SqlInt32。虽然这些类型也可以像标准的值类型那样进行操作,但它们实际上是引用类型。
4.DbDataAdapter
在的核心数据访问类中,最后一个是DbDataAdapter类。它比前面介绍过的类型要复杂得多,设计该类的目的只有一个:减少存储在数据集对象中的数据与数据库进行数据交换时的干扰。与前面的类一样,DbDataAdapter类也有很多派生类,它们统称为数据适配器类。
稍后将详细解释什么是数据集对象,简单地说,它们是能够以.NET对象的形来表示数据库中数据的对象。数据集对象可以包含整个表或多个表的数据。数据适配器既可以将数据库中的数据传输给包含在数据集中的表,也可以将数据集中的数据传输到数据库中。
这个功能由命令对象和数据阅读器对象执行,因此大部分时候用户不必考虑它。然而,DbDataAdapter最重要的(也是最有用的)特性之一是,它用于传输数据的命令对象被暴露出来,因此可以根据需要对它们进行定制。
图2.4说明了DbDataAdapter类的工作原理,包括它包含的命令对象。