2013-03-26 11 views
5

Próbuję zapisać obraz w mojej bazie danych SQL Server, jakiego typu powinienem użyć?Czy mogę użyć typu varbinary do przechowywania obrazu w bazie danych SQL Server?

W poniższym code aspx.cs próbuję odczytać wszystkie bajty z żądania strumienia wejściowego i zapisać go w bazie danych, ale tablica byte[] nie jest poprawnie aktualizowana w tabeli. Czy czegoś brakuje?

protected void Page_Load(object sender, EventArgs e) 
{ 
     Request.InputStream.Position = 0; 

     byte[] Contents = new byte[Request.InputStream.Length]; 

     Request.InputStream.Read(Contents, 0, (int)Request.InputStream.Length); 

     con.Open(); 

     try 
     { 
      string query = "update tblImageUpload set " + IMAGE_ID + " = @imageBytes where Image_ID='" + CID + "'"; 

      int i = 0; 

      using (cmd = new SqlCommand(query, con)) 
      { 
       cmd.Parameters.Add("@imageBytes", SqlDbType.VarBinary, Contents.Length).Value = Contents; 

       i = cmd.ExecuteNonQuery(); 
      } 

      Response.Write("Upload Query = " + query); 
      Response.Write("Upload Code = " + i); 
     } catch (Exception ex) { 
      Response.Write("Upload Code=" + ex); 
     } 
+0

'można użyć varbinary (max)' przepraszam literówka – MethodMan

Odpowiedz

7

Możesz użyć VARBINARY tak. Najprawdopodobniej najlepiej będzie, jeśli będziesz je zapisywać pod numerem VARBINARY(MAX).

Można go używać tak:

cmd.Parameters.Add("@imageBytes", SqlDbType.VarBinaryMax); 
cmd.Parameters["@imageBytes"].Value = Contents; 
+0

starałem się używać do roli operatora ale odczuwało pracy, ale parametryzowane kwerendy SQL działa świetnie, jest istnieją jakiekolwiek ograniczenia dotyczące rozmiaru obrazu do przesłania, mam około 10 kolumn obrazu w tabeli – deepak

+1

@deepak Cóż, byłby ograniczony do maksymalnego rozmiaru "VARBINARY" może pomieścić, czyli 2^31-1 bajtów. Chyba że planujesz przechowywać 2 gigapikselowe i wyżej obrazy, myślę, że wszystko będzie dobrze :) – mattytommo

+0

@mattytommon dziękuję – deepak

Powiązane problemy