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

Vac*_*ano 6 c# compact-framework windows-mobile linq-to-dataset sql-server-ce

有没有人知道如何在SQL Server CE数据库中存储图像?

该列应该是什么数据类型?(我猜二进制.)

我使用Linq-To-Datasets.有可能使用它将图像放入数据库并在以后再次将其拉出来吗?

谢谢你的建议.


我是这样做的:

MemoryStream stream = new MemoryStream();
myBitmapImage.Save(stream, ImageFormat.Png);
myInsertLinqToDataSetRow.IMAGE_COLUMN = stream.ToArray();
Run Code Online (Sandbox Code Playgroud)

要重新加载它我做了这个:

MemoryStream stream = new MemoryStream(myLinqToDataSetRow.IMAGE_COLUMN);
myBitmapImage.SignatureImage = new Bitmap(stream);
Run Code Online (Sandbox Code Playgroud)

我在MSDN上找到一个页面,表示Image列类型正在消失,你应该使用varbinary(MAX).SQL Server CE不支持Max,所以我做了varbinary(8000).

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

kem*_*002 5

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

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

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

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


n53*_*535 5

你为什么不使用Image类型?以下是sql server ce支持的类型说明.

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

  • 因为他们被弃用了.帮助页面显示:**将在Microsoft SQL Server的未来版本中删除ntext,text和image数据类型.避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序.请改用nvarchar(max),varchar(max)和varbinary(max).**(摘自:http://msdn.microsoft.com/en-us/library/ms187993.aspx) (6认同)
  • @Vaccano,数据类型`image`被弃用是不正确的.评论中的链接是**SQL Server 2012**中的数据类型列表,而不是**紧凑版**.但是如果你看一下[SQL CE 4.0中的[数据类型]列表(http://msdn.microsoft.com/en-us/library/ms172424.aspx),就没有关于`image`或者不推荐使用其他数据类型.另请参阅[此主题](http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/9ccd7c7b-9458-48f0-866c-d77b058053a9/)其中SQL Server MVP ErikEJ说`image`is CE中没有弃用. (3认同)