2017-07-19 30 views
0

を表示するのは、私はそうのようvarbinary(max)フィールドにファイルを挿入するとしましょう:もちろんSQL Serverで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では、Attachmentフィールドを使用してダブルクリックしてアップロード/ダウンロードするのと同じくらい簡単です。

+1

SQL Serverはクライアントアプリケーションではありません。ファイルを開くことができるアプリケーションが必要です。 SQL Serverでクエリを実行するだけでは機能しません。 –

+0

ええ、私は知っている...あなたは解決策を提供することができます – Yoav24

+0

どうすればいいですか?私はどのアプリケーションを使用しているのかわかりません。 –

答えて

1

私は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); 

    } 
1

このタスクでSSMSに組み込まれている機能はないので、私は通常、varbinary列を抽出してファイルシステムに書き込む単純なLINQPadスクリプトを作成します。このような

何か:

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()); 
} 
+0

ありがとうございます。私はこれを試してあなたに知らせます – Yoav24

関連する問題