2009-03-04 12 views
4

私は画像のバイトを返すSQLサーバーデータベースを持っています。私がテーブルアダプターウィザードを使用して、それを私のストアードプロシージャーとプレビューデータに設定すると、それはイメージを元に戻します。プレビューデータ内の画像に自動的に変換されます。私はそれを文字や文字列としては見ません。asp.netのSQL Serverデータベースからイメージを表示する最適な方法は何ですか?

gridviewとobjectdatasourceを使用してasp.net Webページに表示するにはどうすればよいですか?

イメージフィールドが、バイト変換を行う別のページのURLを指し示すことができる場所を検索して調べましたが、それが最も良いかどうかはわかりません。私は、一時ファイルを作成する別の方法を見つけました。

これを行う最善の方法を試してみます。

編集 - 私は一時ファイルを使用しようとしていません。グリッドビューを使用できない場合、通常の画像フィールドはOKです。

asp.net 2.0、c#。

ありがとうございました。呼び出しページの

protected void Page_Load(object sender, EventArgs e) 
    { 
     string id = Request["id"]; 
     string connstr = "DSN=myserver"; 
     OdbcConnection conn = new OdbcConnection(connstr); 
     OdbcCommand cmd = new OdbcCommand("{call mySP (?)}", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 

     // Add the input parameter and set its properties. 
     OdbcParameter parameter = new OdbcParameter(); 
     parameter.ParameterName = "@MyParam"; 
     parameter.OdbcType = OdbcType.VarChar; 
     parameter.Direction = ParameterDirection.Input; 
     parameter.Value = id; 

     // Add the parameter to the Parameters collection. 
     cmd.Parameters.Add(parameter); 
     conn.Open(); 
     OdbcDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      byte[] buffer = (byte[])dr[0]; 
      Response.ContentType = "image/jpg"; 
      Response.BinaryWrite(buffer); 
      Response.Flush(); 
     } 
    } 

と、この:

編集になってしまった

<asp:Image ID="Image1" ImageAlign="Middle" ImageUrl="show.aspx?id=123" Runat="server" /> 

答えて

0

Hereはこれを行う方法のいくつかのサンプルコードです。

4

つのオプション:

一時ファイルを作成する - このアプローチの問題は、あなたがあなたのウェブは素晴らしいことではないディレクトリへの書き込みアクセス権を持っていなければならないことを意味したファイルを、作成しなければならないということです。また、画像を整理する方法も必要です。

別のURLから配信する - これは私の推奨する方法です。ディスクへのアクセスは必要ありません。シンプルなhttpハンドラ(ashx)は画像を提供する素晴らしい方法です。

編集

あなたがASHXでセッション状態が必要な場合は、チェックアウト:Asp.net System.Web.HttpContext.Current.Session null in global.asaxを。

編集

カップル以上の考え。一時ファイルを使用するほうが良い場合もあります。例えば、あなたのイメージが多くのユーザーによって頻繁に要求される場合などです。ファイルを一度書き込むことができますので、これは保守の複雑さを増やしますが、トラフィックに応じて、これはネットスタックに戻って呼び出されることを避けることができるので、ディスクにイメージを格納することは理にかなっています静的コンテンツのキャッシング

+0

+1私はすべてashxハンドラールートです。 – bendewey

+0

私はこれらの方法を使わないことを望んでいました。でもありがとう。 – johnny

+0

別の賛成投票 –

0

追加したサンプルコードは良いですが、そのようなものを意味する.ashxファイルに移動する必要があります。

0

open-source ImageResizing.Net libraryのプラグインを使用して、SQLデータベースの画像を最もパフォーマンスに最適な方法で表示および表示できるようにしました。

イメージ処理を行う必要がない場合でも、(a)最も簡単な方法、(b)最も効率的な方法です。可能な限り最高のパフォーマンスを得るために、ディスクキャッシング(自動クリーンアップを提供)と組み合わせることができます。

Installationは簡単です - 2 nugetコマンド、または&をコピーしてWeb.Configに貼り付けてください。

ヘルプが必要な場合は、supportは無料で高速です。

関連する問題