使用 SqliteDataReader 检索数据
最后修改于 2020 年 7 月 6 日
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;否则返回 false。 我们可以使用数组索引表示法检索值,或者使用特定方法以其原生数据类型访问列值。 后者更有效。
$ 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
读取数据。