C# SQLite 检索完整的 blob 并插入完整的 blob

C# SQLite retrieve complete blob and insert complete blob

大家好!目前我正在开发一个 c# 项目,它需要我从 .db3 sqlite 文件中检索图像并将其插入到另一个 .db3 文件中。我可以成功检索 blob 数据并将其作为图像保存在我的本地驱动器中。我的 blob 中有 3 种类型的值,它们是:十六进制、文本和图像。但是,当我尝试检索完整的十六进制值或图像时,我只能检索其中的文本值,因为文本是行中显示的文本。我尝试在多个平台和 google 中搜索,但这些解决方案仍然给我相同的结果。在这种情况下,我无法查看新数据库文件中的图像。我的代码是这样的:

rdrall.Read();
string rawimage = ($"{rdrall[5]}") ;
byte[] newByte = ToByteArray(rawimage);

string inserttbl1 = "INSERT INTO newtest3 (image) VALUES (" + "'" + newbyte + "'" + ")";

SQLiteCommand insert = new SQLiteCommand(inserttbl1, createnew);
insert.ExecuteNonQuery();

结果应该是这样的“????”: expected output

但结果是这样的“system.byte[]”: actual output

并且实际输出不能作为图像查看。无论如何让我检索整个值,或者只是将图像转换为格式?提前致谢!

您正在数据库中插入一个 System.byte[] 文本值,因为 C# 中的字符串连接将调用对象的 .ToString() 方法,byte[] 将使用通用方式来表示对象 (类型名称)在字符串中而不是表示数组内容本身。

如果你想在 blob 列中插入一个 byte[],我建议你使用 bind parameter:

SqliteCommand command = new SqliteCommand("insert into newtest3 (id, name, image) values (@id, @name, @image)", connection);

command.Parameters.Add("@id", SqliteType.Integer).Value = 10;
command.Parameters.Add("@name", SqliteType.Text).Value = "john";
command.Parameters.Add(new SqliteParameter()
{
    ParameterName = "@image",
    Value = data,
    DbType = System.Data.DbType.Binary
});
command.ExecuteNonQuery();

并将 blob 内容读取为 byte[],简单地将列转换为 byte[]:

SqliteCommand query = new SqliteCommand("select image from newtest3", connection);
SqliteDataReader reader = query.ExecuteReader();
while (reader.Read())
{
    byte[] image = (byte[])reader["image"];
}