将映像从db注入到sql报表查询中

时间:2016-01-11 09:31:18

标签: c# sql .net sql-server tsql

如果我正在创建针对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; }
}

要明确I know to transform byte[] to Image,但我不知道如何在上述查询中注入图片。

1 个答案:

答案 0 :(得分:0)

以下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文件是一个“恢复生成事件”,引用克里斯托弗·哈里森的优秀MS虚拟学院视频)