使用C#在SQL Server中存储图像

时间:2010-05-17 15:22:05

标签: c# asp.net sql-server image

我想在SQL Server数据库中将我的员工的图像与他们的个人资料详细信息存储在SQL中,但我有以下预订:

我是否应该压缩图像?如果是,请社区为我提供示例代码或指导我帮助我解决此问题。

我应该如何有效地检索图像?我害怕asp.net应用程序性能问题。我认为有数千个员工记录,系统可能会停止或减速。

5 个答案:

答案 0 :(得分:2)

我建议在sql表上存储图像的路径,并将图像实际存储在安全文件夹中。这对我来说非常有用。

答案 1 :(得分:1)

Sql Server可以很好地处理大量的二进制数据,但是一如既往,恶魔在于细节和设计:

为避免因Sql Server的分页过程(所有数据库引擎使用页面作为数据操作的离散单位)而报告或访问其他应用程序时可能发生的任何性能问题,我会将图像数据放在一个单独的表中,即将1-to1链接到您的员工表。这样做可以防止二进制数据在从系统的其他部分访问时不必要地移动员工查询。您的图像显示逻辑当然必须加入两个表以匹配员工和图像记录。

答案 2 :(得分:1)

首先,一万条记录什么都不是......只要你有正确的索引,SQL Server就可以轻松处理它。

但是,请考虑使用文件系统来存储图像等内容。 SQL Server记录可能只包含文件的指针(即路径),asp.net应用程序可以使用它来从磁盘读取文件并将其传输到浏览器。

答案 3 :(得分:0)

大多数图像格式(例如JPEG或PNG)已经采用了一些压缩算法,因此除非您的源是RAW图像或未压缩的位图,否则额外的压缩将无济于事。可能有用的是限制图像的大小,例如最大400 x 400像素。我不知道预期的目的是什么,所以我不知道这是否适合你。显然,如果您直接从数码相机存储数据,图像将非常大,您可能希望首先缩小它们,使其更合理。

答案 4 :(得分:0)

如果您使用的是SQL Server 2008或更高版本,则可以使用类似于两者中最好的文件流功能。它将图像存储在文件系统中,但它在事务控制下,并且在拍摄时也包含在备份中。

如果您不是2008年或以上,那么我会说将图像保存在数据库中,请参阅这篇旧的Microsoft白皮书,了解其原因。

http://arxiv.org/pdf/cs.DB/0701168