将图像存储在SQL Server CE数据库中

时间:2010-04-14 14:38:10

标签: c# windows-mobile compact-framework sql-server-ce linq-to-dataset

有没有人知道如何在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)。 SQL Server CE不支持Max,所以我做了varbinary(8000)。

稍后注意:虽然SQL Server CE不支持varbinary(max)。 Varbinary(8000)对于许多图像来说都不够大。即使计划弃用,我也最终使用了Image类型。一旦ms在移动平台上提供合理的交替,我将考虑切换。

3 个答案:

答案 0 :(得分:5)

这是一篇MSDN文章,解释了如何:

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

不幸的是,这个例子是在VB中,但我相信你可以知道如何做到这一点。

我想说二进制数据类型可以用于存储图像。

答案 1 :(得分:5)

为什么不使用图像类型? Here是对sql server ce。

支持的类型的描述
  

图像 - 可变长度二进制数据,最大长度为2 ^ 30 - 1(1,073,741,823)字节。

答案 2 :(得分:1)

这不是你问题的直接答案,但我已经很好地将图像的文件路径(例如:C:\ images \ image1.png)存储为数据库中的字符串值而不是原始图像。 / p>

这样做的一个优点是它可以使数据库大小更小。

另一个是多个表可以指向图像而不存储图像的多个副本。