【问题标题】:WinForms application design - moving documents from SQL Server to file storageWinForms 应用程序设计 - 将文档从 SQL Server 移动到文件存储
【发布时间】:2012-05-25 02:20:30
【问题描述】:

我有一个连接到 SQL Server 的标准 WinForms 应用程序。该应用程序允许用户将当前存储在数据库中的文档上传到使用图像列的表中。

我需要更改此方法,以便将文档存储为文件,并将文件的链接存储在数据库表中。

使用当前的方法 - 当用户上传文档时,他们不会受到存储方式的影响,因为他们与数据库有连接,他们不需要知道文件的存储位置,也不需要特殊的目录权限等是必要的。如果我为文档设置网络共享,我希望避免任何 IT 问题,例如用户必须有权访问此目录才能上传或访问现有文档。

有哪些可用的选项来执行此操作?我想有一个临时数据库,以与当前方法相同的方式将文档上传到其中,然后在服务器上运行一个进程将这些文件保存到文件存储中。然后可以删除并重新创建该数据库以回收任何空间。有没有更好的方法?

附加信息:我的应用程序没有 Web 服务器元素,所以我认为 WCF 服务是不可能的

【问题讨论】:

    标签: sql-server winforms


    【解决方案1】:

    我可以告诉你我是如何实现这个任务的。我编写了一个 WCF 服务,用于发送存档文件。所以,如果我是你,我会创建这样一个服务,它应该能够保存文件并将它们发回。这很简单,您还必须确保 WCF 服务在哪个上下文中工作的用户具有读写文件的权限。

    【讨论】:

      【解决方案2】:

      您可以让您的应用程序将对象传递给数据库中的一个过程(可能是 CLR),然后将数据写入您选择的位置,而不存储文件内容。这样你在文件存储和应用程序之间仍然有一个抽象层,但你不需要有一个在你之后清理的进程。

      或者,可以创建应用程序连接到的 WCF/Web 服务。可以使用 web 方法来接受文件内容并将它们写入正确的位置,它可以返回文件的路径或某些文件标识符。

      【讨论】:

        【解决方案3】:

        您是否有首先要从数据库中取出文件的原因?

        是否仍将它们保存在 SQL Server 中,但使用 FILESTREAM column 而不是 IMAGE

        引用链接:

        FILESTREAM 使基于 SQL Server 的应用程序能够存储非结构化 文件系统上的数据,例如文档和图像。应用 可以利用文件的丰富流 API 和性能 同时保持系统之间的事务一致性 非结构化数据和相应的结构化数据。

        FILESTREAM 将 SQL Server 数据库引擎与 NTFS 文件集成 系统通过将 varbinary(max) 二进制大对象 (BLOB) 数据存储为 文件系统上的文件。 Transact-SQL 语句可以插入、更新、 查询、搜索和备份 FILESTREAM 数据。 Win32文件系统 接口提供对数据的流式访问。

        FILESTREAM 使用 NT 系统缓存来缓存文件数据。这有助于 减少 FILESTREAM 数据可能对数据库引擎产生的任何影响 表现。未使用 SQL Server 缓冲池;因此,这 内存可用于查询处理。

        这样您就可以两全其美:
        这些文件将作为文件存储在硬盘上(与将它们存储在数据库中相比可能更快),但您不必关心文件共享、权限等。

        请注意,您至少需要 SQL Server 2008 才能使用FILESTREAM

        【讨论】:

        • 哦,是的,filestream :D 差点忘记了
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        • 1970-01-01
        • 2017-08-18
        相关资源
        最近更新 更多