2009-03-04 17 views
4

Görüntü için bayt döndüren bir sql sunucu veritabanım var. Tableadapter sihirbazını kullanır ve saklı yordamlarıma ve önizleme verilere ayarlarsam, bir görüntüyü geri çeker. Önizleme verilerinde otomatik olarak bir görüntüye dönüştürür. Onu Ints veya herhangi bir şey dizisi olarak görmüyorum.Asp.net'de bir sql sunucu veritabanından bir görüntüyü görüntülemenin en iyi yolu nedir?

Bunu asp.net web sayfamda nasıl gridview ve objectdatasource ile görüntüleyebilirim?

Görüntü alanının, bayt dönüşümü yapan başka bir sayfadaki bir URL'ye yönlendirilebildiği ve en iyisi olduğundan emin olmadığım için arama yaptım. Geçici dosya oluşturan başka bir yol buldum.

Sadece bunu yapmanın en iyi yolunu görmeye çalışıyorum.

düzenleme - Geçici dosya kullanmamaya çalışıyorum. Izgara görünümü kullanamazsam normal bir görüntü alanı tamam.

asp.net 2.0, C#.

Yardımlarınız için teşekkür ederiz. arama sayfasındaki

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

ve bu:

düzenlemek ile sona erdi

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

cevap

0

Here bu nasıl yapılacağına ilişkin bazı örnek kodudur.

4

İki seçenek:

bir geçici dosya oluşturma - bu yaklaşımla sorunu size harika bir şey olmayan bir dizine yazma erişimine sahip olması gerekir ağı anlamına gelir dosyası oluşturmak zorunda olmasıdır. Ayrıca görüntüleri temizlemenin bir yolunun olması gerekir.

Başka bir URL'den sunun - Gerekli disk erişiminiz olmadığı için tercih ettiğim yöntem budur. Basit bir http işleyicisi (ashx), görüntüyü sunmak için harika bir yöntemdir. Eğer ASHX oturum durumunu gerekiyorsa

Düzenleme

göz atın: Asp.net System.Web.HttpContext.Current.Session null in global.asax.

Düzenle

Birkaç fikir daha var. Geçici dosya kullanmanın daha iyi olabileceği bazı durumlar vardır. Örneğin, resimleriniz çok sayıda kullanıcı tarafından sıkça isteniyorsa. Daha sonra diskin üzerindeki görüntüleri saklamak mantıklı olacaktır, çünkü dosyayı bir kez yazabilirdiniz, bu bakımın karmaşıklığını artırır ancak trafiğe bağlı olarak buna değer olabilir çünkü bu, .net yığınına geri çağırmaktan ve IIS'den faydalanmanıza engel olur. Statik içeriğin önbelleğe alınması.

+0

+1 Ben külx işleyicisi yolundayım. – bendewey

+0

Bu yöntemleri kullanmamayı umuyordum. Ama teşekkür ederim. – johnny

+0

başka bir ashx oyladı –

0

Eklediğiniz örnek kod iyidir, ancak bu tür şeyler için kullanılan bir .ashx dosyasına taşımalısınız.

0

open-source ImageResizing.Net library için SqlReader eklentisini, SQL veritabanından en yüksek performansa göre en uygun şekilde sunmanıza ve görüntülemenize izin verdim.

Herhangi bir görüntü işleme yapmanıza gerek kalmasa bile, yine de (a) en kolay ve (b) bunu yapmanın en etkili yolu. Mümkün olan en iyi performansı elde etmek için disk önbellekleme (otomatik temizleme sağlayan) ile birleştirebilirsiniz.

Installation - 2 nuget komutlarıdır veya WebConnect'inizde & yapıştırmasını seçin.

Yardıma ihtiyacınız varsa support ücretsiz ve hızlıdır.