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"];
}
大家好!目前我正在开发一个 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"];
}