乍一看,我的问题似乎很微不足道。我必须从Firebird的数据库中读取数据,但这个数据库是由其他人创建的。原始二进制数据(如图片)存储在BLOB SUB_TYPE TEXT
中而不是BLOB SUB_TYPE BINARY
这就是问题所在,因为 Firebird ADO.NET 数据提供程序 (FirebirdSql.Data.FirebirdClient 7.10.1) 将二进制数据转换为字符串,而我找不到正确的方法在此驱动程序中,从 BLOB SUB_TYPE TEXT
返回二进制数据作为字节数组.
我试图反转由提供商转换为字符串的二进制数据,但没有成功。我通过以下方式使用此提供程序(简化示例):
using var fbConnection = new FbConnection(connectionString);
fbConnection.Open();
var readCommand = new FbCommand(command, fbConnection);
var reader = readCommand.ExecuteReader();
while (reader.Read())
{
// reader[0] contains data from column with BLOB SUB_TYPE TEXT type
var rawData = Encoding.Default.GetBytes(reader[0].ToString());
// ...
}
根据这篇文章,这种转换是不可能的: https://stackoverflow.com/a/14168060/1281652
理论上,解决方法之一如下所述: https://stackoverflow.com/a/24821965 但我无法修改这个数据库,所以就我而言,它不适用。
如何在 C# 中正确读取这些数据?
最佳答案
正如 Charlieface 的评论所示,您可以使用reader.GetBytes
。
或者,您可以通过显式转换强制 Firebird 将类型表示为二进制:
cast(yourfield as BLOB SUB_TYPE BINARY)
从任何 blob 子类型到二进制的转换都将生成原始二进制数据,除非已定义 blob 过滤器来应用不同的转换。
关于c# - 从 Firebird BLOB SUB_TYPE TEXT 读取原始二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66175505/