将数据库中的图像注入sql报表查询中

本文关键字:sql 报表 注入 查询 图像 数据库 | 更新日期: 2023-09-27 18:29:50

如果我正在针对mssql-db-创建简单的报告查询

if not exists(select * from DeliveryTemplate where TemplateId=2)
    begin 
       select u.usersCode, 1,2,'User {UsersCode}',' hello {Username},', null, dt.DeliveryCode 
       from User u
          left join DeliveryTemplate dt on u.Id = dt.UserId
    end

如何扩展该查询以插入数据库中的图像,该图像在DeliveryTemplate 中表示为byte[]

public class DeliveryTemplate{
   ...
   public virtual byte[] MyImage { get; set; }
}

只是为了明确我知道将byte[]转换为Image,但我不知道如何在上面的查询中注入图像。

将数据库中的图像注入sql报表查询中

以下T-SQL对我有效:

UPDATE DeliveryTemplate SET MyImage = 
(SELECT * FROM OPENROWSET (BULK N'C:'Images'Image.jpg', SINGLE_BLOB) rs) 
WHERE UserId = identity_value

编辑:按如下方式创建图像字段:

ALTER TABLE DeliveryTemplate ADD MyImage VARBINARY(MAX) NULL

注意必须将映像存储在SQL Server具有访问权限的文件夹中。如果它是一个自定义文件夹(如上所述),您需要为此向SQL Server提供权限(我认为它是用户MSSQL$MSSQLSERVER2012,具体取决于您的SQL版本)。

您可以通过检查SQL数据文件夹或数据库MDF文件存储位置的权限来进行检查(在SSMS中,右键单击数据库>属性>文件)。在我的机器上,数据库存储在C:'Program Files'Microsoft SQL Server'MSSQL11.MSSQLSERVER2012'MSSQL'DATA中。

当然,你不想在那个文件夹里乱搞太多,因为你的数据库实际上存储在那里。但是您可以使用它来测试上面的SQL代码,并将图像输入数据库。在任何情况下,您都不想删除那里的任何MDF或LDF文件!!!(删除MDF文件是一个"简历生成事件",引用Christopher Harrison从优秀的MS虚拟学院视频中的话)