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

标签 c# .net firebird

乍一看,我的问题似乎很微不足道。我必须从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/

相关文章:

c# - 返回 IEnumerable<T> 与 IQueryable<T>

c# - 在 C#/.NET 中持久存储设置/变量

sql - Firebird - 获取触发器内所有修改的字段

java - Jaybird java.lang.NoClassDefFoundError

c# - 如何在 WPF XAML 中使用嵌套类?

c# - 读取、写入、追加、删除内存映射文件

c# - 使用永远不会发生的 `FirstAsync` 观察者任务来避免资源泄漏

python - 在 Windows 上安装 firebird RDBMS 绑定(bind)包时出错

c# - 批量更新mysql表

c# - 如何设置文件版本注释