You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从SQL数据库提取Blob格式PDF数据转文件时无法打开

问题排查与解决方法

最可能的原因:文件写入模式导致残留数据

你的代码中使用了FileMode.OpenOrCreate,如果目标文件test3.pdf之前已经存在,这个模式不会截断原有文件——它只会覆盖你写入的字节部分,原有文件中超出新写入长度的残留数据会留在文件末尾,破坏PDF的结构。

修改方法:把FileMode.OpenOrCreate替换为FileMode.Create,这样会直接创建新文件(如果已存在则完全覆盖),避免残留数据:

using (FileStream fstream = new FileStream(@"C:\Users\myUsername\Desktop\test3.pdf", FileMode.Create, FileAccess.Write))
{
    fstream.Write(bytes, 0, bytes.Length);
}

另外,既然只需要写入操作,FileAccess.Write比ReadWrite更贴合需求。

其他排查方向

  • 验证数据库Blob数据本身是否正常:用数据库管理工具(比如SQL Server Management Studio)直接导出该Blob字段为PDF文件,如果导出的文件也打不开,说明数据在存储时就已经损坏,需要检查写入数据库的代码是否正确(比如是否误将二进制数据当成字符串处理、有没有编码转换错误)。
  • 确认数据库字段类型:确保存储PDF的字段是VARBINARY(MAX)(推荐)或IMAGE(过时但兼容),不要使用VARCHAR/TEXT等字符类型——字符类型会对二进制数据进行编码转换,导致数据失真。
  • 检查数据读取是否完整:对比数据库中Blob的实际大小和你代码中bytes.Length输出的数值是否一致,如果不一致,说明查询时数据被截断,需要检查SQL查询语句是否有问题(比如是否用了限制长度的函数)。

内容的提问来源于stack exchange,提问作者Andreas Utzinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:21:16