Pet*_*rCo 3 vb.net sqlite blob
我将图片中的二进制数据写入我的 SQLite 数据库到一个名为“icondata”的 BLOB 字段中。
CREATE TABLE pictures(id INTEGER PRIMARY KEY AUTOINCREMENT, icondata BLOB)
Run Code Online (Sandbox Code Playgroud)
写入二进制数据的代码片段是:
SQLcommand.CommandText = "INSERT INTO pictures (id, icondata) VALUES (" & MyInteger & "," & "@img)"
SQLcommand.Prepare()
SQLcommand.Parameters.Add("@img", DbType.Binary, PicData.Length)
SQLcommand.Parameters("@img").Value = PicData
Run Code Online (Sandbox Code Playgroud)
这工作正常,我可以使用SQlite Spy 之类的工具在数据库中找到 BLOB 值。
但是如何搜索特定的“icondata”BLOB?
如果我尝试:
SQLcommand.CommandText = "SELECT id FROM pictures WHERE icondata=@img"
Run Code Online (Sandbox Code Playgroud)
并具有与上述相同的参数:
SQLcommand.Prepare()
SQLcommand.Parameters.Add("@img", DbType.Binary, PicData.Length)
SQLcommand.Parameters("@img").Value = PicData
Dim SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader()
While SQLreader.Read()
... Process found database entries....
End While
Run Code Online (Sandbox Code Playgroud)
我没有得到任何结果。
如果我将 SELECT 查询更改为 'LIKE' 而不是 '=' 我会得到所有带有 BLOB 的条目,而不仅仅是匹配的条目。
我必须如何编写 SELECT 查询以查找特定 BLOB 的 1 个完全匹配的条目?
您可以在此处搜索 BLOB,以下是一些示例:-
DROP TABLE IF EXISTS pictures;
CREATE TABLE IF NOT EXISTS pictures (id INTEGER PRIMARY KEY, icondata columntypedoesnotmatter);
INSERT INTO pictures (icondata) VALUES
(x'fff1f2f3f4f5f6f7f8f9f0fff1f2f3f4f5f6f7f8f9f0'),
(x'ffffffffffffffffffff'),
(x'010203040506070809'),
(x'010203040506070809010203040506070809')
;
SELECT id, hex(icondata) FROM pictures WHERE icondata = x'010203040506070809' OR icondata = x'FFFFFFFFFFFFFFFFFFFF';
SELECT id, hex(icondata) FROM pictures WHERE icondata LIKE '%'||x'F0'||'%';
SELECT id, hex(icondata) FROM pictures WHERE hex(icondata) LIKE '%F0%';
Run Code Online (Sandbox Code Playgroud)
这导致:-
第一个查询按预期找到了 2 行(第 2 行和第 3 行)
即SELECT id, hex(icondata) FROM pictures WHERE icondata = x'010203040506070809' OR icondata = x'FFFFFFFFFFFFFFFFFFFF';导致:-
第二个查询未按预期工作,是如何不使用 LIKE的示例:- 即SELECT id, hex(icondata) FROM pictures WHERE icondata LIKE '%'||x'F0'||'%';导致意外的两行:-
然而,第三个查询使用hex函数将存储的 blob 转换为其十六进制字符串表示形式,并将其与 F0 的字符串表示形式进行比较
即SELECT id, hex(icondata) FROM pictures WHERE hex(icondata) LIKE '%F0%';导致预期的单行:-
我从未使用过 vb.net,所以我不确定您如何将上述内容编码为传递的参数。
| 归档时间: |
|
| 查看次数: |
4760 次 |
| 最近记录: |