2009-08-12 14 views
6

私のデータベースには、イメージを「イメージ」データ型で保存してあり、バイナリコードとして表示されています。 これで、1つの列からすべてのイメージを取得し、C#でasp.netページに表示します。Linqを使用したデータベースからSQLへのイメージの取得

databaseDataContext db = new databaseDataContext(); 

    var images = from Picture p in db.Pictures 
       select p.pictureThumb; 

その後、私はこれを使用します。

をしかし、バイナリ画像に変換することができないので、それは動作しません。私はこれをGoogledし、私はByteにキャストし、イメージする必要があることが判明しましたか?私はそれを行う方法の例を見つけることができません。

答えて

11

これはそれを行う必要があります。

databaseDataContext db = new databaseDataContext(); 

var images = from p in db.Pictures 
      select Image.FromStream(new MemoryStream(p.pictureThumb.ToArray()); 
foreach (Image image in images) 
{ 
    galleryImages.Controls.Add(image); 
} 

Image.FromStreamは、ストリームの所有権を取ること - それはとにかくだけMemoryStreamですが、あなたは様々な理由のために、画像を処分することを確認してください。


EDIT:Ah ...私はこれがASP.NET用であることを認識していませんでした。これは、HTMLがURLを含むため、後でデータを取得できる必要があるため、作業が難しくなります。

画像に何らかの種類のIDがありますか?そうであれば、実際のデータの代わりにそのIDを取り出し、IDに基づいてサムネイルを提供できるURLを設定します(データベースから取り出し、適切なコンテンツタイプで提供するだけです)。

+0

ありがとう、それは多くの問題の世話をした。私はループにいくつかの問題がありますが、 "最適なオーバーロードされたメソッドのマッチ[...]には無効な引数がいくつかあります"。 galleryImagesはPlaceHolderを参照していますが、他の可能性(Literal、Imageなど)でも同じエラーが発生します。 "(System.Drawing.Image"から "System.Web.UI.Control"に変換できません) "確かに私は.NETで非常に不慣れだと確信しています: – Kablam

+1

それはそれでした:) データベースからpictureIDを取得し、getImage.aspx.csを使用して実際のイメージデータを抽出します。 ContentType = "image/jpeg"を使用します。およびBinaryWrite。 ありがとうJon! – Kablam

+0

クール - 「非常に経験の浅い」と主張している人のために、本当にすばやく回っていました:) –

関連する問題