2011-07-08 1 views
0

写真を保存し、名前、説明、価格などでグリッドビューに表示したいのですが、どのように行うのかわかりません。まず、画像をアップロードする方法は?私は現在、Windowsフォームアプリケーションを使用して他の情報を保存していますが、今度は画像も保存する必要があります。これらのイメージは、ASP.NETアプリケーションのWebページから表示する必要があります。c#(asp.net)とSQL Serverの画像を保存して読み込む方が良いですか?

パスを保存する必要はありません。他のユーザーが自分のコンピュータのウェブページから読み込むためです。データベースvarbinaryまたはimageで使用するのに最適なフォーマットは何ですか?私はどのようにこれらを使用するか、またはgridviewでそれらを見えるようにする方法がわかりません。イメージへのパスがある場合はそれを行う方法はわかりますが、イメージがデータベースにある場合はできません。

どのようにデータベースにイメージを保存してから、それをgridviewに表示する方法を教えてもらえますか?

+0

ごめんなさい完全にテストされていないが、書かれたとして、この問題は私に頭痛を与えました。英語が母国語でない場合でも、質の高い回答が期待される場合は、論理的かつ一貫した方法で質問をレイアウトしてください。 varbinaryとimageの違いについては、 – Yuck

+0

jajaja @Yuck – angel

+1

に感謝します。http://stackoverflow.com/questions/4113294/is-there-a-big-technical-difference- between-varbinarymax-and-image -data-types/4113417#4113417 – kristian

答えて

3

データベースに保存する場合は、varbinaryを使用してください。これは機能的にはimageの列タイプと同等ですが、imageは非推奨となり、varbinary(MAX)となりました。通常、データベースからのイメージを使用するには、イメージに関連付けられた識別子をエンコードするURLを処理するHttpHandler(またはASP.NET MVCを使用する場合はコントローラ/アクション)を作成します(例:http://www.example.com/imagehandler.ashx?id=42)。この場合のハンドラは、データベース内でIDが42のイメージを見つけ、適切なMIMEタイプを持つカラムの内容に対応するバイト配列からの応答を構築することを知っています。

サンプルコード:

public class ImageHandler: IHttpHandler 
{ 
    public void ProcessRequest (HttpContext context) 
    { 
     int imageID = -1; 
     if (context.Request.QueryString["id"] == null || !int.TryParse(context.Request.QueryString["id"], out imageID)) 
     { 
      throw new ArgumentException("Invalid or missing image id."); 
     } 

     using (var context = new ImagesDataContext()) 
     { 
       var image = context.Images.SingleOrDefault(i => i.ID == imageID); 
       if (image != null) 
       { 
        context.Response.ContentType = image.MimeType; 
        context.Response.BinaryWrite(image.Content); 
       } 
       else 
       { 
        // decide how you want to handle an image that isn't found 
       } 
     } 

    } 

    public bool IsReusable 
    { 
     get { return false; } 
    } 
} 
関連する問題