Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SQLServer2005映像列中存储20兆文件的最有效方法_C#_Sql Server_Sql Server 2005_Image_Database Design - Fatal编程技术网

C# 在SQLServer2005映像列中存储20兆文件的最有效方法

C# 在SQLServer2005映像列中存储20兆文件的最有效方法,c#,sql-server,sql-server-2005,image,database-design,C#,Sql Server,Sql Server 2005,Image,Database Design,我们在SQLServer2005数据库表中以“Image”列格式存储文档 每次我试图存储一个大于1兆的PDF文件时,它都会被破坏 在.NET中是否有任何特别有效的方法来序列化大型文件(约10兆字节)并将其存储到数据库中 [编辑] 微软实际上说最大文件大小约为2G 从0到2^31-1(2147483647)字节的可变长度二进制数据。 将文件存储在文件系统中,并将对文件的引用存储在数据库中不是更有意义吗?在数据库中存储20MB文件听起来可能会导致一些性能问题 遵循以文档为中心的方法,不要在数据库中存

我们在SQLServer2005数据库表中以“Image”列格式存储文档

每次我试图存储一个大于1兆的PDF文件时,它都会被破坏

在.NET中是否有任何特别有效的方法来序列化大型文件(约10兆字节)并将其存储到数据库中

[编辑] 微软实际上说最大文件大小约为2G 从0到2^31-1(2147483647)字节的可变长度二进制数据。

将文件存储在文件系统中,并将对文件的引用存储在数据库中不是更有意义吗?在数据库中存储20MB文件听起来可能会导致一些性能问题

遵循以文档为中心的方法,不要在数据库中存储像pdf和图像这样的文档,当您开始发现数据库存在各种性能问题时,您最终将不得不对其进行重构。只需将文件存储在文件系统中,并将路径放在数据库的表中即可

然而,您可能已经在处理这个问题,所以请看本文


它解释说,varbinarary的最大限制是2字节,提高到31字节,这是您可以存储在sql server 2005中的内容。

如果此时不想从数据库中重构文档,一个快速解决方案是对数据使用压缩:


我怀疑Sql Server是否正在破坏您的文件,但使用gzip算法可能会帮助您找到一个bug。

您不应该在Sql Server 2005中使用大型二进制数据,无论如何?

损坏可能与您如何将文件放入数据库并检索有关?请显示用于存储和检索文件的代码。另外,请告诉我们你是如何知道腐败的。你能不能用测试数据而不是文件来重现损坏:如果你存储了20MB的零,你能检索到20MB的零。有趣的是我的单元测试仍然通过。我序列化文件,获取内容大小(字节长度),保存它,检索文件并比较字节,它们是相同的。但当我试图查看检索到的文件时,它已损坏。。。这种情况只发生在大文件上。我现在(地铁里)没有代码,我要去预约。这是标准的C#FileStream bytes[]东西。单元测试不会写入数据库。或者是我继承了这个项目的文件系统,并且他们总是在数据库中存储文档。是否可以将该列转换为BLOB?我的SQL server已经生锈了,但是如上所述,使用二进制对象而不是图像列可以克服varbinary的限制。这几乎是2GB。我只想存储大约10MB一些文件类型(例如PDF、图像)压缩不到5%-10%是的,
IMAGE
类型将很快被弃用-SQL Server 2008 R2可能不再支持它。改用
VARBINARY(MAX)