VB.NET学习笔记:ADO.NET操作ACCESS数据库——使用OleDbDataReader对象

OleDbDataReader类提供从数据源读取数据行的只进流的方法。 此类不能被继承。也就是说我们只能通过它读取数据而不能修改数据且读取记录的游标只会不断前进,每次只能读取一行,可以减少系统开销,所以高效。
示例代码:

        '连接数据库
        Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\test.accdb")
        '打开数据库
        conn.Open()
        '生成命令
        Dim cmd As New OleDbCommand("SELECT ID,stuname FROM studenttbl", conn)
        '执行命令
        Dim reader As OleDbDataReader '声明OleDbDataReader对象
        reader = cmd.ExecuteReader() '实例OleDbDataReader对象,注意不能用New
        Dim Strreader As String = ""
        While reader.Read() '读取数据
            For i = 0 To reader.FieldCount - 1
                If reader.IsDBNull(i) = False Then
                    Strreader &= reader(i).ToString & " "
                End If
            Next
            Strreader &= Environment.NewLine
        End While

        If Not reader.IsClosed Then
            reader.Close() '关闭OleDbDataReader对象
        End If

        '关闭数据库
        conn.Close()

代码解读:
1、若要创建OleDbDataReader,必须调用OleDbCommand对象的ExecuteReader方法,而不是直接使用构造函数。试图用New关键字实例化OleDbDataReader会发生错误。
OleDbCommand对象的ExecuteReader方法有无参数和带参数2个重载版本,可以按需要选择。如:

reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

这里的参数表示当关闭reader的时候同时关闭数据库连接,也就是说可以省略conn.Close()这句代码,系统会自动调用这个方法来关闭conn。
2、使用OleDbDataReader的Read方法前进到下一条记录,若返回True则表示有下一条记录。
以上代码使用OleDbDataReader对象的Item[Int32]属性通过给定列序号来读取数据,也可以使用Item[String]属性通过给定列名称来读取数据,如:

While reader.Read() '读取数据
            Strreader &= reader("ID").ToString & " " & reader("stuname") & Environment.NewLine
 End While

如果已事先知道返回的各列的数据类型,可以使用OleDbDataReader对象的一系列方法(GetString、GetInt32等)来读取数据,可以减少在获取列值时所需的大量类型转换。如:

Strreader &= reader.GetInt32(0).ToString & " " & reader.GetString(1) & Environment.NewLine

还可以使用OleDbDataReader对象的GetValues方法把当前行的列值用来填充对象数组,一次性读取一行的数据。如:

Dim Strreader As String = ""
        Dim arr() As Object
        While reader.Read() '读取数据
            ReDim arr(reader.FieldCount - 1)
            reader.GetValues(arr)
            Strreader &= String.Join(",", arr) & Environment.NewLine
        End While

还可以使用DataTable对象的Load方法将OleDbDataReader对象的数据加载到DataTable中。

Dim dt As New DataTable
dt.Load(reader)

3、OleDbDataReader对象处于打开状态时会占用连接,也就是说数据库必须处于打开状态。一旦用完应该马上关闭OleDbDataReader,然后才能关闭OleDbConnection。
4、可能还会用到OleDbDataReader对象的一些方法,如:
GetDataTypeName(col) :获取序号为col的列的来源数据类型名
GetFieldType(col) :获取序号为col的列的数据类型,一般显示会是System.**
GetName(col): 获取序号为col的列的字段名
GetOrdinal(name) :获取字段名为name的列的序号

猜你喜欢

转载自blog.csdn.net/zyjq52uys/article/details/88941132