在 SQLite Visual Basic 教程的这一章中,我们将使用图像文件。 请注意,有些人反对将图像放入数据库。 在这里,我们只展示如何做。 我们不讨论天气技术问题是否将图像保存在数据库中。
sqlite> CREATE TABLE Images(Id INTEGER PRIMARY KEY, Data BLOB);
对于此示例,我们创建一个名为Images的新表。 对于图像,我们使用BLOB数据类型,代表二进制大对象。
插入图像
在第一个示例中,我们将图像插入 SQLite 数据库。
Option Strict OnImports System.IOImports System.DataImports Mono.Data.SqliteModule ExampleSub Main()Dim cs As String = "URI=file:test.db"Using con As New SqliteConnection(cs)con.Open()Dim data As Byte()Trydata = File.ReadAllBytes("woman.jpg")Catch ex As ExceptionConsole.WriteLine(ex.ToString())End TryDim cmd As New SqliteCommand(con)cmd.CommandText = "INSERT INTO Images(Data) VALUES (@img)"cmd.Prepare()cmd.Parameters.Add("@img", DbType.Binary, data.Length)cmd.Parameters("@img").Value = datacmd.ExecuteNonQuery()con.Close()End UsingEnd SubEnd Module
我们从当前工作目录中读取图像,并将其写入 SQLite test.db数据库的Images表中。
Dim data As Byte()
图像数据将存储在字节数组中。
data = File.ReadAllBytes("woman.jpg")
ReadAllBytes()方法打开一个二进制文件,将文件的内容读取到字节数组中,然后关闭该文件。
cmd.CommandText = "INSERT INTO Images(Data) VALUES (@img)"cmd.Prepare()
我们准备一条 SQL 语句,用于将字节数组插入Images表的Data列中。
cmd.Parameters.Add("@img", DbType.Binary, data.Length)
cmd.Parameters("@img").Value = data
cmd.ExecuteNonQuery()
我们将二进制数据绑定到预备语句。 然后执行该语句。 该图像被写入数据库表。
读取图像
在本节中,我们将执行相反的操作。 我们将从数据库表中读取图像。
Option Strict On
Imports System.IO
Imports System.Data
Imports Mono.Data.Sqlite
Module Example
Sub Main()
Dim cs As String = "URI=file:test.db"
Using con As New SqliteConnection(cs)
con.Open()
Dim cmd As New SqliteCommand(con)
cmd.CommandText = "SELECT Data FROM Images WHERE Id=1"
Dim data As Byte() = cmd.ExecuteScalar()
Try
If data IsNot Nothing
File.WriteAllBytes("woman2.jpg", data)
Else
Console.WriteLine("Binary data not read")
End If
Catch ex As Exception
Console.WriteLine(ex.ToString())
End Try
con.Close()
End Using
End Sub
End Module
我们从Images表中读取图像数据,并将其写入另一个文件woman2.jpg中。
cmd.CommandText = "SELECT Data FROM Images WHERE Id=1"
该行从表中选择图像数据。
Dim data As Byte() = cmd.ExecuteScalar()
我们从数据库表中检索二进制数据。 数据存储在字节数组中。
If data IsNot Nothing
File.WriteAllBytes("woman2.jpg", data)
Else
Console.WriteLine("Binary data not read")
End If
WriteAllBytes()方法创建一个新文件,将指定的字节数组写入该文件,然后关闭该文件。 如果目标文件已经存在,则将其覆盖。 当数据库表为空并运行此示例时,我们得到Nothing。 因此,我们检查Nothing值。
SQLite Visual Basic 教程的这一部分专门用于读取和写入图像。
