ADO.NET经过长时间的发展,很多用户都很了解ADO.NET了,这里我发表一下个人理解,和大家讨论讨论。使用ADO.NET DataReader检索数据包括创建Command对象的实例,然后通过调用Command.ExecuteReader创建一个DataReader,以便从数据源检索行。下面的示例演示如何使用ADO.NET DataReader检索数据,其中reader表示有效的DataReader,而command表示有效的Command对象。
- reader=command.ExecuteReader();
#T#使用DataReader对象的Read方法可从查询结果中获取行。通过向DataReader传递列的名称或序号引用,可以访问返回行的每一列。不过,为了实现***性能,DataReader提供了一系列方法,将使您能够访问其本机数据类型(GetDateTime、GetDouble、GetGuid、GetInt32等)的列值。有关数据提供程序特定的DataReaders的类型化访问器方法列表,请参见OleDbDataReader和SqlDataReader。假定基础数据类型为已知,如果使用类型化访问器方法,将减少在检索列值时所需的类型转换量。
.NETFramework的WindowsServer2003版包含DataReader的附加属性HasRows,该属性使您能够在读取DataReader之前就可确定它是否返回了任何结果。以下代码示例循环访问一个DataReader对象,并从每个行中返回两个列。
- PrivateSubHasRows(ByValconnectionAsSqlConnection)
- Usingconnection
- DimcommandAsSqlCommand=NewSqlCommand(_
- "SELECTCategoryID,CategoryNameFROMCategories;",_
- connection)
- connection.Open()
- DimreaderAsSqlDataReader=command.ExecuteReader()
- Ifreader.HasRowsThen
- DoWhilereader.Read()
- Console.WriteLine(reader.GetInt32(0)_
- &vbTab&reader.GetString(1))
- Loop
- Else
- Console.WriteLine("Norowsfound.")
- EndIf
- reader.Close()
- EndUsing
- EndSub
DataReader提供未缓冲的数据流,该数据流使过程逻辑可以有效地按顺序处理从数据源中返回的结果。由于数据不在内存中缓存,所以在ADO.NET DataReader检索数据过大时,DataReader是一种适合的选择。关闭DataReader。每次使用完DataReader对象后都应调用Close方法。如果Command包含输出参数或返回值,那么在DataReader关闭之前,将无法访问这些输出参数或返回值。
请注意,当DataReader打开时,该DataReader将以独占方式使用Connection。在原始DataReader关闭之前,将无法对Connection执行任何命令(包括创建另一个DataReader)。不要在类的Finalize方法中对Connection、DataReader或任何其他托管对象调用Close或Dispose。在终结器中,仅释放类直接拥有的非托管资源。如果类不拥有任何非托管资源,则不要在类定义中包含Finalize方法。