从 Firebird BLOB SUB_TYPE TEXT 读取原始二进制数据

Reading raw binary data from Firebird BLOB SUB_TYPE TEXT

乍一看,我的问题似乎很微不足道。我必须从 Firebird 的数据库中读取数据,但是这个数据库是由其他人创建的。原始二进制数据(如图片)存储在 BLOB SUB_TYPE TEXT 而不是 BLOB SUB_TYPE BINARY 中,这就是问题所在,因为 Firebird ADO.NET Data Provider (FirebirdSql.Data.FirebirdClient 7.10.1) 将二进制数据转换为字符串,我在该驱动程序中找不到合适的方法将 returns 二进制数据作为字节数组从 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());
    // ...
}

根据这个post,这种转换是不可能的:

理论上,这里描述了一种解决方法: 但是我不能修改这个数据库,所以在我的情况下,它不适用。

如何在 C# 中正确读取此数据?

Charlieface 的评论所述,您可以使用 reader.GetBytes

或者,您可以通过显式转换强制 Firebird 将类型表示为二进制:

cast(yourfield as BLOB SUB_TYPE BINARY)

从任何 blob 子类型到二进制的转换都将生成原始二进制数据,除非已定义 blob 过滤器以应用不同的转换。