【问题标题】:How to map a Folder to a Table in SQL Server 2008?如何在 SQL Server 2008 中将文件夹映射到表?
【发布时间】:2011-04-15 00:40:59
【问题描述】:

我使用的是 SQL Server 2008。

我有一个表 (TBL_FILE) 将用户上传的文件存储在二进制列中。但是用户不想打开我们的系统来访问该文件。他们希望有一个映射到表 (TBL_FILE) 的文件夹(网络驱动器、Web 文件夹、本地驱动器、本地文件夹......都可以接受)。所以他们可以直接在文件资源管理器中直接打开文件。

关键是他们想直接在文件资源管理器中打开文件

有可能做到吗?我需要编写什么样的程序才能做到这一点?又怎么做安全?

谢谢!

亚历克斯

【问题讨论】:

    标签: sql-server-2008 file filesystems mapped-drive


    【解决方案1】:

    您是否考虑过编写一个提示登录的应用程序,然后在友好的用户界面中向用户显示文件列表?您可以将该应用程序的快捷方式放在他们希望这些文件所在的文件夹中。

    如果您必须有直接从文件系统到二进制数据字段的快捷方式,那么您将不得不有点hacky。根据文件的更新频率,您可以尝试以下选项之一:

    1 - 编写将作为 Windows 服务或计划作业运行的应用程序。定期检查更改的二进制数据,并将其保存到磁盘。缺点:文件系统只会间隔更新,所以数据库更改不会立即可用。

    2 - 在将二进制文件保存到磁盘的表上写入触发器。每当行更改时触发触发器 - 最好通过监视“上次修改时间”或类似字段,而不是直接检查二进制值。触发器可以触发 CLR 存储过程,或者您可以直接从 T-SQL using the method described here 执行它。 缺点:你有一个潜在的耗时触发器。

    在任何一种情况下,安全都会成为 Windows 文件系统的问题。只需将文件夹的访问权限授予应查看文件的任何人。

    祝你好运!

    【讨论】:

    • 感谢您的回复。我理解你的观点。我的 old 解决方案是在数据库和文件系统之间执行数据同步。在文件系统上创建文件更改侦听器。一旦文件系统发生变化,监听器就会更新数据库中的记录。此外,创建一个触发器以将文件从数据库更新到文件系统。但是,它们都很慢。我正在寻找新的解决方案来处理这个问题。所以最好(也许过于理想)的方法是将文件夹映射到数据库表。谢谢
    【解决方案2】:

    在google上搜索后,终于找到了解决这个问题的办法。

    我们可以使用 .NET 技术或其他第三方库创建逻辑驱动器。其中一个库是 Doken http://dokan-dev.net/en/

    Doken 能够让我们在计算机中创建驱动器并自己执行逻辑。它似乎能够将文件夹映射到数据库中的表。但我还没试过。

    谢谢!

    亚历克斯

    【讨论】:

    • Dokan 的一大特点是它是免费的开源许可证。不幸的是,这是 Dokan 唯一的优点。
    猜你喜欢
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    相关资源
    最近更新 更多