繁体   English   中英

来自Reporting Services中数据库的图像

[英]Image from DB in Reporting Services

从本质上讲,我的基本问题是我无法在SSRS中显示图像。 我得到了一个带有“ x”的小盒子。 这些图像我开发并控制的Web应用程序存储在SQL db中 ...由Web服务处理,我也可以控制。

我想知道我是否出错了多个地方:

在客户端上,我使用javascript FileReader API即时呈现上载图像的缩略图以显示给用户。 var reader = new FileReader();

调用reader.readAsDataURL(file); 我将数据放入变量imageURL = reader.result并进行了一些字符串操作以从(base64编码的)文件数据字符串中删除data:image/jpeg;base64, ,然后最终使用SOAP信封将此变量传递给服务器。

因此, 在服务器上 ,图像数据由我的Web服务(只是.asmx /不是WCF)作为字符串数据类型接收,然后最终作为SQL VARCHAR(MAX)插入数据库。

报表服务中,我放入一个图像控件,然后将图像源设置为“数据库”,将字段从我的数据集中设置为我的照片字段,并将MIME类型设置为jpeg ...我相信这都是适当的。

所以...我相信我在SSRS中没有做错任何事情,但是也许在客户端上我在如何发送数据方面做错了什么? 或者,也许我选择存储的图像数据不正确。 我确实可以访问服务器计算机,因此也许需要将图像保存在文件系统中,但是即使是我目前的方法,它似乎仍然可以正常工作。

如果需要提供更多信息,请告诉我。

要解决您的问题,您需要将数据库字段更改为:

  • SQL 2012之前的版本-图像数据类型
  • SQL 2012-varbinary(max)作为图像数据类型已弃用

您还需要更改Web服务以上传字节流而不是字符串。

即使您使用的是SQL 2008或2008R2,我也建议您使用varbinary数据类型来将来对数据库模型进行打样。

要为SSRS报告创建测试数据源,请使用以下SQL生成名为ImageTest的表。 您需要提供将上传到表格中的图片的文件路径。

CREATE TABLE ImageTest (
  image_data VARBINARY(MAX));

INSERT INTO ImageTest (image_data)
SELECT image_data
FROM OPENROWSET(
        BULK N'<location of an image file>',
        SINGLE_BLOB) AS ImageSource(image_data);

要尝试在SSRS中创建表格,请使用

  • 指向表ImageTest的数据集
  • 向报表添加图像控件,并将其图像源指向image_data列

预览报告时,您应该使用存储在数据库中的图像来查看报告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM