c# - 将数据库中的图像注入(inject)到 sql 报告查询中

标签 c# sql .net sql-server tsql

如果我针对 mssql 数据库创建简单的报告查询

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但我不知道如何在上述查询中注入(inject)图像。

最佳答案

以下 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 中,右键单击“数据库”>“属性”>"file")。在我的机器上,数据库存储在 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2012\MSSQL\DATA 中。

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

关于c# - 将数据库中的图像注入(inject)到 sql 报告查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718039/

相关文章:

C# 和 VB.NET LDAP 搜索不同?

c# - 可以找到错误 CS1061 “...Does Not Contain Definition and No Extension Method...accepting a first argument of type ”

java - 从 java.sql.Timestamp 获取公历日期

mysql - 如何在主选择和连接中访问子查询

sql - 比较 PostgreSQL 中的两个数组

c# - 多个套接字连接

c# - 为什么具有默认值的枚举在 C# 中不能按预期工作?

c# - javascript 函数 "$find"是否特定于 asp.net webforms 中的 telerik 客户端对象?

c# - SelectNodes 不适用于 stackoverflow 提要

.net - Entity Framework 4.0 中的批处理 DB 命令