在sql server中保存和检索不同文件的一般解决方案

时间:2014-04-07 06:35:29

标签: c# .net sql-server file stream

我知道如何将图像存储到db(将它们转换为byte []然后保存它)以及检索(从db中选择byte []并使用image方法从byte []创建图像)。到目前为止,我很酷,但如何将PDF保存/检索到数据库?那么.doc.mp3.exe和说.ppt个文件呢?

是否有一种通用的方法来保存和检索sql server的文件?最糟糕的部分是检索,让我们想象我们找到了一种方法将任何文件保存到sql server,现在我们如何从db重建文件?我们在保存之前不知道文件扩展名是什么?

2 个答案:

答案 0 :(得分:0)

嗯,一般来说,将实际文件保存到数据库被认为是不好的做法。 部分原因是您在帖子中提到的问题,更重要的是将文件直接保存到数据库有很大的开销(例如将图像转换为字节数组并返回)。

处理文件和数据库的简单方法(在大多数情况下建议)是将文件直接保存到文件系统,并将数据库中的路径与其他文件相关的数据(例如上传的用户ID)保存在一起文件。

这样您就不必担心制动和重建文件,只需将它们发送到服务器并按原样返回给用户。

请记住,不建议保留文件的完整路径,只保留相对路径。

我通常做的是在serer本身或用户的计算机上(在桌面应用程序中)保存用户的所有文件。在任何这些情况下,都有一个只有读/写权限的专用文件夹(绝不允许用户将文件保存到具有执行权限的目录中!),并保持此目录的路径为数据库或网站/ application / webservice的配置文件中的'General Params'表。

答案 1 :(得分:0)

嗯,文件属性(名称,扩展名,作者等)通常以关系的方式保存在SQL Server中的表中。文件本身应保存在SQL Server数据库中,具体取决于SQL Server的版本和文件大小。对于较小的文件,请使用FILESTREAM或FILETABLES功能;对于较小的文件,请使用VARBINARY(MAX)。

无论是图像,文档还是pdf,如果您将其读入FileStream,都可以将其保存到数据库中。

将文件存储在数据库中的优点是简化了管理,备份,安全性和完整性。使用FILESTREAM和FILETABLES功能,使用.NET中的SqlFileStream对象访问文件与文件系统上的文件几乎相同。

在此处查看更多信息:

http://technet.microsoft.com/en-us/library/gg471497.aspx

在这里:

http://technet.microsoft.com/en-us/library/ff929144.aspx