使用SqliteDataReader
检索数据
SqliteDataReader
是用于从数据库检索数据的类。 它与SqliteCommand
类一起使用以执行 SQL SELECT
语句,然后访问返回的行。 它提供对查询结果的快速,仅转发和只读访问。 这是从表中检索数据的最有效方法。
我们不使用构造器,而是通过调用SqliteCommand
对象的ExecuteReader()
方法来创建SqliteDataReader
的实例。 在使用SqlDataReader
时,关联的SqlConnection
为SqlDataReader
服务。 除了关闭SqlConnection
之外,无法执行其他任何操作。
Option Strict On
Imports Mono.Data.Sqlite
Module Example
Sub Main()
Dim cs As String = "URI=file:test.db"
Using con As New SqliteConnection(cs)
con.Open()
Using cmd As New SqliteCommand(con)
cmd.CommandText = "SELECT * FROM Cars LIMIT 5"
Dim rdr As SqliteDataReader = cmd.ExecuteReader()
Using rdr
While (rdr.Read())
Console.WriteLine(rdr.GetInt32(0) & " " _
& rdr.GetString(1) & " " & rdr.GetInt32(2))
End While
End Using
End Using
con.Close()
End Using
End Sub
End Module
我们从Cars
表中获得 5 辆汽车,并将它们打印到控制台。
Dim rdr As SqliteDataReader = cmd.ExecuteReader()
要创建SQLiteDataReader
对象,我们必须调用SqliteCommand
对象的ExecuteReader()
方法。
While (rdr.Read())
Console.WriteLine(rdr.GetInt32(0) & " " _
& rdr.GetString(1) & " " & rdr.GetInt32(2))
End While
Read()
方法将数据读取器移至下一条记录。 如果有更多行,则返回true
;否则,返回true
。 否则为假。 我们可以使用数组索引符号来检索值,或者使用特定的方法来访问其本机数据类型中的列值。 后者效率更高。
$ mono retrieve.exe
1 Audi 52642
2 Mercedes 57127
3 Skoda 9000
4 Volvo 29000
5 Bentley 350000
Cars
表的前五行。
我们可以通过字段的列名来检索字段。
Option Strict On
Imports Mono.Data.Sqlite
Module Example
Sub Main()
Dim cs As String = "URI=file:test.db"
Using con As New SqliteConnection(cs)
con.Open()
Using cmd As New SqliteCommand(con)
cmd.CommandText = "SELECT * FROM Cars LIMIT 5"
Dim rdr As SqliteDataReader = cmd.ExecuteReader()
Using rdr
While (rdr.Read())
Console.Write("{0} ", rdr("Id"))
Console.Write("{0} ", rdr("Name"))
Console.WriteLine("{0} ", rdr("Price"))
End While
End Using
End Using
con.Close()
End Using
End Sub
End Module
该示例从Cars
表中打印 5 行。 这次我们使用列名来获取表字段。
While (rdr.Read())
Console.Write("{0} ", rdr("Id"))
Console.Write("{0} ", rdr("Name"))
Console.WriteLine("{0} ", rdr("Price"))
End While
数据库表字段由其列名引用。
多个语句
ADO.NET 规范允许在单个字符串中执行多个语句。 如有查询,SqliteDataReader
返回多个结果集。 它具有NextResult()
方法来浏览结果集。
Option Strict On
Imports Mono.Data.Sqlite
Module Example
Sub Main()
Dim cs As String = "URI=file:test.db"
Using con As New SqliteConnection(cs)
con.Open()
Using cmd As New SqliteCommand(con)
cmd.CommandText = "SELECT 25; SELECT 44; SELECT 33"
Dim rdr As SqliteDataReader = cmd.ExecuteReader()
Using rdr
Do
rdr.Read()
Console.WriteLine("{0}", rdr.GetInt32(0))
Loop While rdr.NextResult()
End Using
End Using
con.Close()
End Using
End Sub
End Module
我们在一个 SQL 字符串中有三个查询。 将有三个结果集。
cmd.CommandText = "SELECT 25; SELECT 44; SELECT 33"
有三个SELECT
语句。 它们之间用分号分隔。 它们每个都将返回一个值。
Do
rdr.Read()
Console.WriteLine("{0}", rdr.GetInt32(0))
Loop While rdr.NextResult()
Read()
方法将SqliteDataReader
移至下一条记录。 GetInt32()
方法将值检索为 32 位带符号整数。 NextResult()
将数据读取器移至下一个结果。
$ mono multiple.exe
25
44
33
运行示例。
我们已经完成了SqliteDataReader
的数据读取。