企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 使用 Visual Basic 在 SQLite 中处理图像 > 原文: [http://zetcode.com/db/sqliteimg/](http://zetcode.com/db/sqliteimg/) 在 SQLite Visual Basic 教程的这一章中,我们将使用图像文件。 请注意,有些人反对将图像放入数据库。 在这里,我们只展示如何做。 我们不讨论天气技术问题是否将图像保存在数据库中。 ```vb sqlite> CREATE TABLE Images(Id INTEGER PRIMARY KEY, Data BLOB); ``` 对于此示例,我们创建一个名为`Images`的新表。 对于图像,我们使用`BLOB`数据类型,代表二进制大对象。 ## 插入图像 在第一个示例中,我们将图像插入 SQLite 数据库。 ```vb 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 data As Byte() Try data = File.ReadAllBytes("woman.jpg") Catch ex As Exception Console.WriteLine(ex.ToString()) End Try Dim 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 = data cmd.ExecuteNonQuery() con.Close() End Using End Sub End Module ``` 我们从当前工作目录中读取图像,并将其写入 SQLite `test.db`数据库的`Images`表中。 ```vb Dim data As Byte() ``` 图像数据将存储在字节数组中。 ```vb data = File.ReadAllBytes("woman.jpg") ``` `ReadAllBytes()`方法打开一个二进制文件,将文件的内容读取到字节数组中,然后关闭该文件。 ```vb cmd.CommandText = "INSERT INTO Images(Data) VALUES (@img)" cmd.Prepare() ``` 我们准备一条 SQL 语句,用于将字节数组插入`Images`表的`Data`列中。 ```vb cmd.Parameters.Add("@img", DbType.Binary, data.Length) cmd.Parameters("@img").Value = data cmd.ExecuteNonQuery() ``` 我们将二进制数据绑定到预备语句。 然后执行该语句。 该图像被写入数据库表。 ## 读取图像 在本节中,我们将执行相反的操作。 我们将从数据库表中读取图像。 ```vb 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`中。 ```vb cmd.CommandText = "SELECT Data FROM Images WHERE Id=1" ``` 该行从表中选择图像数据。 ```vb Dim data As Byte() = cmd.ExecuteScalar() ``` 我们从数据库表中检索二进制数据。 数据存储在字节数组中。 ```vb If data IsNot Nothing File.WriteAllBytes("woman2.jpg", data) Else Console.WriteLine("Binary data not read") End If ``` `WriteAllBytes()`方法创建一个新文件,将指定的字节数组写入该文件,然后关闭该文件。 如果目标文件已经存在,则将其覆盖。 当数据库表为空并运行此示例时,我们得到`Nothing`。 因此,我们检查`Nothing`值。 SQLite Visual Basic 教程的这一部分专门用于读取和写入图像。