如何通过C#读取Oracle数据库中的图片显示到WinForm_BLOB转Byte[]与流处理

Oracle BLOB字段读取必须用OracleCommand配合ExecuteScalar()或OracleDataAdapter获取OracleBlob对象,再调用GetStream()获取流并完整读入byte\[\],不可直接强转;须用Oracle.ManagedDataAccess,连接字符串加Pooling=false,流操作需在连接关闭前完成,UI更新须Invoke回主线程。Oracle BLOB 字段读取必须用 OracleCommand 配合 ExecuteScalar() 或 OracleDataAdapter,不能直接当字符串查oracle 的 blob 是二进制大对象,sql 查询里如果写 select photo from users 拿到的不是字节数组,而是一个 oracleblob 对象(或 dbnull),直接强转 byte\[\] 会崩------常见错误是 invalidcastexception 或空引用。正确做法是显式获取流或分块读取:用 ExecuteScalar() 获取 OracleBlob 实例,再调用其 GetStream() 方法若用 OracleDataAdapter.Fill() 填充 DataTable,字段值类型是 OracleBlob,仍需调用 GetStream(),不能直接 (byte\[\])row"photo"别用 CommandBehavior.SequentialAccess 以外的方式读大 BLOB,否则可能内存爆掉WinForm 中显示图片前必须确保 byte\[\] 完整且格式可识别从 OracleBlob.GetStream() 读出来的流,得先全部读成 byte\[\] 才能喂给 PictureBox.Image。但注意:流位置可能不在开头,且 Oracle 驱动有时返回不可重置的流。实操建议:始终用 using (var stream = blob.GetStream()) { ... } 包裹,避免句柄泄漏用 stream.CopyTo(ms) 写入 MemoryStream,再调用 ms.ToArray() ------别用 stream.Read() 自己循环,容易漏字节检查 byte\[\] 开头是否为常见图片魔数(如 0xFF, 0xD8 表示 JPEG),防止数据库存了空/损坏数据导致 PictureBox 显示空白却不报错若图片尺寸大,考虑异步加载(Task.Run + Invoke 回 UI 线程),否则界面卡死OracleClient 已废弃,必须用 Oracle.ManagedDataAccess 并注意连接字符串里的 Pooling=false.NET Framework 自带的 System.Data.OracleClient 早在 2011 年就标记为废弃,VS 编译会警告,运行时在新系统上大概率失败。现在唯一靠谱的是 Oracle 官方的 Oracle.ManagedDataAccess NuGet 包。关键细节: 知网AI智能写作 知网AI智能写作,写文档、写报告如此简单

相关推荐
VIP_CQCRE6 分钟前
内容自动化越跑越乱?先补上状态、去重和失败恢复
python·ai·工作流·幂等设计·内容自动化
ClouGence11 分钟前
MongoDB 双向同步如何防止数据循环?(附实操指南)
数据库·mongodb
我喜欢就喜欢18 分钟前
RAG 重排序 Rerank 实战:用 bge-reranker 把 Top-K 命中率拉回来
python·大模型·向量检索·rag·rerank
TDengine (老段)23 分钟前
TDengine IDMP 十大实用功能(7)
数据库·物联网·时序数据库·tdengine·涛思数据·工业数据·idmp
专注仿真24 分钟前
卷积神经网络(CNN)算法详解
人工智能·python·算法·代码·大模型训练
Decay__25 分钟前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构
zjx238838 分钟前
oracle11g转Gbase8s库SQL常见问题修改
数据库·sql
isfox41 分钟前
Python3 协程:异步编程的核心机制与实战
python
真上帝的左手1 小时前
30. 技术专题-‌应用框架组件-缓存-Redis
数据库·redis·分布式·缓存·中间件
用户298698530141 小时前
Python 将 Markdown 批量转为 HTML:单文件与目录遍历两种实现
python·html·markdown