【问题标题】:Viewing a file stored in Varbinary(MAX) in SQL Server在 SQL Server 中查看存储在 Varbinary(MAX) 中的文件
【发布时间】:2017-07-19 20:17:09
【问题描述】:

假设我将一个文件插入到 varbinary(max) 字段中,如下所示:

CREATE TABLE myTable
(
      FileName nvarchar(60),
      FileType nvarchar(60), 
      Document varbinary(max)
)
GO

INSERT INTO myTable(FileName, FileType, field_varbinary)
    SELECT 
        'Text1.txt' AS FileName, 
        '.txt' AS FileType,
        * 
    FROM 
        OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document
GO

当然我的文件现在看起来像这样:

0xFFD8FFE000104A46494600010101004800....

有没有一种简单而优雅的方法来检索这个文件?

我的偏好是立即在临时文件夹中打开它,而不是保存然后查看和删除。在 MS Access 中,这就像使用附件字段并双击上传/下载一样简单。

【问题讨论】:

  • SQL Server 不是客户端应用程序。您需要一个可以打开文件的应用程序。仅仅在sql server中查询是行不通的。
  • 是的,我知道...你能提供一个解决方案
  • 我该怎么做?我不知道你用的是什么应用程序。

标签: sql-server database tsql ms-access file-io


【解决方案1】:

由于 SSMS 中没有用于此任务的内置功能,因此我通常编写一个简单的 LINQPad 脚本来提取我的 varbinary 列并将其写入文件系统。

类似这样的:

var results = from p in myTable 
                       where p.ID == ... //your condition here
                       select p;

foreach (var item in results)
{ 
    File.WriteAllBytes("C:\\" + item.FileName + item.FileType , item.Document.ToArray());
}

【讨论】:

    【解决方案2】:

    我正在使用 C# 和 ASP.NET,我最终使用通用处理程序执行此操作,后来在我的网站项目的其他地方链接到它:

    public class ImageProvider : IHttpHandler {
        public string connString = "...";
    
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/jpeg";
    
            string sqlSelectQuery = "select img from table"
            SqlConnection conn = new SqlConnection(connString);
            conn.Open();
            SqlCommand cmd = new SqlCommand(sqlSelectQuery, conn);
    
            byte[] img = (byte[])cmd.ExecuteScalar();
            context.Response.BinaryWrite(img);
    
        }
    

    【讨论】:

      猜你喜欢
      • 2013-05-08
      • 1970-01-01
      • 2014-07-29
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多