原文: http://zetcode.com/db/sqlitevb/read/

SqliteDataReader是用于从数据库检索数据的类。 它与SqliteCommand类一起使用以执行 SQL SELECT语句,然后访问返回的行。 它提供对查询结果的快速,仅转发和只读访问。 这是从表中检索数据的最有效方法。

我们不使用构造器,而是通过调用SqliteCommand对象的ExecuteReader()方法来创建SqliteDataReader的实例。 在使用SqlDataReader时,关联的SqlConnectionSqlDataReader服务。 除了关闭SqlConnection之外,无法执行其他任何操作。

  1. Option Strict On
  2. Imports Mono.Data.Sqlite
  3. Module Example
  4. Sub Main()
  5. Dim cs As String = "URI=file:test.db"
  6. Using con As New SqliteConnection(cs)
  7. con.Open()
  8. Using cmd As New SqliteCommand(con)
  9. cmd.CommandText = "SELECT * FROM Cars LIMIT 5"
  10. Dim rdr As SqliteDataReader = cmd.ExecuteReader()
  11. Using rdr
  12. While (rdr.Read())
  13. Console.WriteLine(rdr.GetInt32(0) & " " _
  14. & rdr.GetString(1) & " " & rdr.GetInt32(2))
  15. End While
  16. End Using
  17. End Using
  18. con.Close()
  19. End Using
  20. End Sub
  21. End Module

我们从Cars表中获得 5 辆汽车,并将它们打印到控制台。

  1. Dim rdr As SqliteDataReader = cmd.ExecuteReader()

要创建SQLiteDataReader对象,我们必须调用SqliteCommand对象的ExecuteReader()方法。

  1. While (rdr.Read())
  2. Console.WriteLine(rdr.GetInt32(0) & " " _
  3. & rdr.GetString(1) & " " & rdr.GetInt32(2))
  4. End While

Read()方法将数据读取器移至下一条记录。 如果有更多行,则返回true;否则,返回true。 否则为假。 我们可以使用数组索引符号来检索值,或者使用特定的方法来访问其本机数据类型中的列值。 后者效率更高。

  1. $ mono retrieve.exe
  2. 1 Audi 52642
  3. 2 Mercedes 57127
  4. 3 Skoda 9000
  5. 4 Volvo 29000
  6. 5 Bentley 350000

Cars表的前五行。

我们可以通过字段的列名来检索字段。

  1. Option Strict On
  2. Imports Mono.Data.Sqlite
  3. Module Example
  4. Sub Main()
  5. Dim cs As String = "URI=file:test.db"
  6. Using con As New SqliteConnection(cs)
  7. con.Open()
  8. Using cmd As New SqliteCommand(con)
  9. cmd.CommandText = "SELECT * FROM Cars LIMIT 5"
  10. Dim rdr As SqliteDataReader = cmd.ExecuteReader()
  11. Using rdr
  12. While (rdr.Read())
  13. Console.Write("{0} ", rdr("Id"))
  14. Console.Write("{0} ", rdr("Name"))
  15. Console.WriteLine("{0} ", rdr("Price"))
  16. End While
  17. End Using
  18. End Using
  19. con.Close()
  20. End Using
  21. End Sub
  22. End Module

该示例从Cars表中打印 5 行。 这次我们使用列名来获取表字段。

  1. While (rdr.Read())
  2. Console.Write("{0} ", rdr("Id"))
  3. Console.Write("{0} ", rdr("Name"))
  4. Console.WriteLine("{0} ", rdr("Price"))
  5. End While

数据库表字段由其列名引用。

多个语句

ADO.NET 规范允许在单个字符串中执行多个语句。 如有查询,SqliteDataReader返回多个结果集。 它具有NextResult()方法来浏览结果集。

  1. Option Strict On
  2. Imports Mono.Data.Sqlite
  3. Module Example
  4. Sub Main()
  5. Dim cs As String = "URI=file:test.db"
  6. Using con As New SqliteConnection(cs)
  7. con.Open()
  8. Using cmd As New SqliteCommand(con)
  9. cmd.CommandText = "SELECT 25; SELECT 44; SELECT 33"
  10. Dim rdr As SqliteDataReader = cmd.ExecuteReader()
  11. Using rdr
  12. Do
  13. rdr.Read()
  14. Console.WriteLine("{0}", rdr.GetInt32(0))
  15. Loop While rdr.NextResult()
  16. End Using
  17. End Using
  18. con.Close()
  19. End Using
  20. End Sub
  21. End Module

我们在一个 SQL 字符串中有三个查询。 将有三个结果集。

  1. cmd.CommandText = "SELECT 25; SELECT 44; SELECT 33"

有三个SELECT语句。 它们之间用分号分隔。 它们每个都将返回一个值。

  1. Do
  2. rdr.Read()
  3. Console.WriteLine("{0}", rdr.GetInt32(0))
  4. Loop While rdr.NextResult()

Read()方法将SqliteDataReader移至下一条记录。 GetInt32()方法将值检索为 32 位带符号整数。 NextResult()将数据读取器移至下一个结果。

  1. $ mono multiple.exe
  2. 25
  3. 44
  4. 33

运行示例。

我们已经完成了SqliteDataReader的数据读取。