2011-01-31 28 views
11

我試圖將我的圖像保存到數據庫時遇到此錯誤。如何將圖像保存到數據庫?

我在做什麼錯? enter image description here

這裏是我的表的設計:

enter image description here

我使用的是Microsoft Server 2008的

+2

+1有據可查。 – 2011-01-31 15:23:27

+0

它是錯誤的原因? – yonan2236 2011-01-31 15:23:59

回答

15

你有兩個問題:

  1. 的(可以理解的)混亂關於SQL Server中的Image數據類型。這實際上只是一個大的二進制對象(一個常見的BLOB)。爲了保存圖像(或其他任何東西)在這個列中,您必須先將它轉換爲byte[],然後將該字節數組存儲在列中。
  2. 您正在使用不推薦使用的Image數據類型。如果您可以控制此設計,請將其更改爲使用varbinary(MAX)。雖然Image類型仍在SQL Server 2008 R2中,但它在某些時候會從未來的版本中刪除。

爲了得到一個byte[]代表的形象,嘗試了這一點:

byte[] data; 

using(System.IO.MemoryStream stream = new System.IO.MemoryStream()) 
{ 
    image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); 
    data = stream.ToArray(); 
} 

data變量現在包含圖像的二進制數據,你可以使用它作爲你的參數值。你可以在這裏採取額外的步驟(例如以JPEG等另一種格式保存),但這至少應該讓你開始。

檢索數據時,它也會作爲byte[]返回,因此您需要再次將其轉換爲圖像。

byte[] data = ...; 

Image image = Image.FromStream(new System.IO.MemoryStream(data)); 
0

該錯誤是很清楚的,存在來自GDI圖像對象爲一個字節數組沒有轉換(這是什麼SQL Server數據列類型Image真的是)。在將其添加爲參數之前,需要將Image對象轉換爲字節數組。

相關問題