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