使用VB.Net将图片存入SQLite Blob字段时遇数据未插入问题
VB.Net写入SQLite Blob字段无数据插入问题排查
问题根源分析
- 连接字符串路径错误:
Application.StartupPath后缺少路径分隔符\,导致实际操作的是自动创建的空数据库文件(而非目标Database1.db),插入操作看似执行但未写入到预期数据库中。 - 未显式提交事务:SQLite默认需要显式提交事务,隐式事务可能因资源未正确释放导致回滚。
- 资源未正确释放:未使用
Using语句管理连接和命令对象,可能引发资源泄漏或隐式回滚。
修正后的代码
Private Sub btnProcessSingle_Click(sender As Object, e As EventArgs) Handles btnProcessSingle.Click Dim data() As Byte = File.ReadAllBytes(txtFileName.Text) Dim connectionString As String = $"DataSource={Application.StartupPath}\Database1.db;Version=3" Using sqlite_conn As New SQLiteConnection(connectionString) sqlite_conn.Open() Using sqlite_cmd As New SQLiteCommand(sqlite_conn) sqlite_cmd.CommandText = "INSERT INTO PHOTO(Award_No, Photo) VALUES('2022-001', @img)" sqlite_cmd.Parameters.Add("@img", DbType.Binary).Value = data ' 显式开启并提交事务,确保数据持久化 Using trans As SQLiteTransaction = sqlite_conn.BeginTransaction() sqlite_cmd.ExecuteNonQuery() trans.Commit() End Using End Using End Using txtFileName.Text = "" End Sub
关键修复点
- 补全连接字符串的路径分隔符,确保操作目标数据库文件
- 使用
Using语句自动管理连接、命令和事务资源,避免泄漏 - 显式提交事务,强制将插入操作写入数据库
- 移除不必要的
Prepare()调用,SQLiteCommand会自动处理参数准备
内容的提问来源于stack exchange,提问作者Muzza51
相关产品推荐
相关产品推荐

