VB 2010 (55)DataReader对象

    使用DataReader对象可以从数据库中获取一个只读且仅前向遍历的数据流口DataReader可以提高应用程序的性能,减少系统开销,因为在内存中的任意时刻只有一个缓存行。利用DataReader对象,能够在ADO.NET中获取尽可能接近原始的数据;能够节省填充DataSet对象所需要的系统开销(如果DataSet含有许多数据,填充DataSet对象的系统开销就会很大)。使用DataReader对象的缺点是,它需要一个打开的数据库连接,增加了网络活动。
    在创建了一个Command对象实例后,调用Command对象的ExecuteReader方法创建DataReader对象。DataReader提供了一个未缓冲的数据流,允许过程逻辑按顺序有效地处理数据源的结果。 当您检索大量数据时 ,DataReader是一个不错的选择,因为数据未缓存在内存中。使用DataReader.Read方法从查询结果中获取行。 通过将列的名称或单位编号传递给DataReader, 可以访问返回行的每个列。 但是,为了获得最佳性能 ,DataReader提供了一系列方法,允许您访问其本机数据类型中的列值(GetDateTime、GetDouble、GetGuid、GetInt32 等)。GetDateTime GetDouble GetGuid GetInt32 有关特定于数据提供程序的数据阅读器的键入访问器方法的列表,请参阅OleDbDataReaderSqlDataReader。 当您知道基础数据类型时,使用键入的访问器方法可减少检索列值时所需的类型转换量。

使用数据读取器检索数据

https://docs.microsoft.com/zh-cn/dotnet/framework/data/adonet/retrieving-data-using-a-datareader

下面是创建一个DataReader对象,并对它进行遍历,以输出所有值的范例:

Imports System.Data.SqlClient
Module Module1

    Sub Main()
        testDataReader()

        Console.Read()
    End Sub

    Private Sub testDataReader()

        Dim sqlStr As String = "Select * From authors"
        Dim connStr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Users\Administrator\AppData\Local\Temporary Projects\025DataReader对象\pubs.mdf';Integrated Security=True;Connect Timeout=30;User Instance=True"
        Dim comm As SqlCommand = New SqlCommand(sqlStr, New SqlConnection(connStr))
        comm.Connection.Open()
        Dim reader As SqlDataReader = comm.ExecuteReader(CommandBehavior.CloseConnection)
        Do While reader.Read
            Console.Write(reader.GetString(0) & Space(4) & reader.GetString(1).PadRight(15) & Space(5) & reader.GetString(2) & vbCrLf)
        Loop

        reader.Close()
    End Sub
End Module
      DataReader对象的Read方法可以获取查询结果中的某一行。把列名或列的序号引用传递给DataReader,就可以对返回行中的每一列进行访问。为了使性能最优,DataReader提供了一系列的方法(GetDateTime、GetDouble、GetGuid和Getlnt32等),以访问基本数据类型的列值。在知道基本据类型的情况下,使用这些类型化的访问器方法可以减少在获取列值时所需的大量类型转换(从Object类型转换过来)。
      DataReader是一个无缓冲的数据流,该数据流允许过程逻辑有效地按顺序处理来自数据源的结果。在获取大量的数据时,最好选择DataRcader,因为每次只会在内存中缓存—行数据。在使用完DataReader对象时,必须调用Close方法并关闭DataReader对象的数据库连接;否则连接只有在垃圾回收器收集该对象时才关闭。另外,使用Using语句会在Using子句的最后自动关闭数据库连接。
      注意,在SqIDataReader. ExecuteReadar方法中使用了CommandBehavior.CloseConnection枚举值。这就告诉SqICommand对象,在调用SqIDataReader.Close方法时,要自动关闭数据库连接。
     这里有一个设计问题:是使用DataReader还是DataSet。这个问题的答案取决于性能和使用数据的方式。如果需要高性能,并且对要获取的数据只访问—次,则使用DataReader;如果要多次访问同一个数据,或要在内存中模拟—种复杂的关系,或者需要在不连接数据库的情况下使用数据,则使用DataSet.通常,在确定使用哪一个之前,最好全面测试每—种方法.
 

发布了146 篇原创文章 · 获赞 0 · 访问量 2723

猜你喜欢

转载自blog.csdn.net/ngbshzhn/article/details/105626386
VB