6

是否有人知道如何將圖像存儲在SQL Server CE數據庫中的示例?將圖像存儲在SQL Server CE數據庫中

列應該是什麼數據類型? (我猜是二進制的。)

我使用Linq-To-Datasets。是否有可能使用它將圖像放入數據庫並在稍後再將其拉出?

感謝您的任何建議。


這是我如何做的:回來了,我再次這樣做

MemoryStream stream = new MemoryStream(); 
myBitmapImage.Save(stream, ImageFormat.Png); 
myInsertLinqToDataSetRow.IMAGE_COLUMN = stream.ToArray(); 

加載它:

MemoryStream stream = new MemoryStream(myLinqToDataSetRow.IMAGE_COLUMN); 
myBitmapImage.SignatureImage = new Bitmap(stream); 

我發現了一個頁面上MSDN是說Image列類型正在消失,你應該使用varbinary(MAX)。 Max不支持SQL Server CE,所以我做了varbinary(8000)。

後續注意:儘管varbinary(max)在SQL Server CE上不受支持。 Varbinary(8000)對於許多圖像來說不夠大。即使計劃棄用,我也最終使用了Image類型。一旦ms在移動平臺上提供了一個合理的替代品,我將考慮切換。

回答

5

這裏是一個MSDN文章,解釋如何:

http://support.microsoft.com/kb/318639

不幸的是,這個例子在VB,但我相信你可以得到如何做到這一點的想法。

我會說二進制數據類型可以很好地存儲圖像。

1

這不是直接回答你的問題,但我已經成功地將圖像的文件路徑(例如:C:\ images \ image1.png)存儲爲數據庫中的字符串值而不是原始圖像。

這樣做的一個好處是可以使數據庫的大小更小。

另一個是多個表可以指向圖像,而不需要存儲圖像的多個副本。

+0

合理的想法,如果我存儲參考數據。但是,這是用於當前窗口的屏幕截圖。我需要他們在數據庫中保持組織。 – Vaccano 2010-05-04 15:57:34

+0

+1:我不太喜歡這樣做,最大的問題(圖像的多個副本)**可以簡單地通過**創建一個表格與一個id和圖像解決。 **雖然將來會棄用圖像類型和varbinary大小的限制,但我認爲它實際上是最佳選擇**。多麼可悲的MS .. – Diego 2011-09-19 21:47:58

+0

我在我的一個應用程序中發現的一些用於停止重複顯示同一圖像的東西是將圖像信息放在單獨的表格上,然後將所有內容都引用到該表格中。我有圖像的散列,二進制內容和一個id。一旦圖像在數據庫中,而不是複製二進制內容,我只是添加另一個引用該圖像。 – JLopez 2013-08-13 18:14:39

5

爲什麼不使用圖像類型? Here是由sql server ce支持的類型的描述。

圖片 - 1(1,073,741,823)個字節 - 與2^30的最大長度的可變長度二進制數據。

+5

因爲它們已被棄用。幫助頁面說:**將在未來版本的Microsoft SQL Server中刪除ntext,文本和圖像數據類型。避免在新的開發工作中使用這些數據類型,並計劃修改當前正在使用它們的應用程序。使用nvarchar(max),varchar(max)和varbinary(max)代替。** (摘自:http://msdn.microsoft.com/en-us/library/ms187993.aspx) – Vaccano 2010-05-04 15:52:58

+1

雖然我做了最終將使用SQL Server CE的映像類型。 (原因varbinary(8000)不夠大) – Vaccano 2010-05-04 15:54:55

+0

噢,謝謝,我真的不知道) – n535 2010-05-04 15:57:23