0

我必须构建一个可以从本地网络上的文件夹中搜索和显示 PDF 文件的软件。我的主管要求有一个数据库并将 PDF 文件的路径存储在那里(不是 PDF 本身,因为数量很大),所以我可以从软件中搜索和打开它们。

如果您能给我一些解决问题的想法,我将不胜感激。

4

4 回答 4

1

你不是已经解决了吗?您可以拥有一个应用程序,例如服务,甚至是一个命令行应用程序,可以轮询/手动查看指定的文件夹,从那里您将获得完整的文件位置并将其保存到您的数据库中。当您需要搜索 PDF 时,您可以针对您的数据库执行与您的条件相匹配的 PDF 的查询。

您甚至可以从文件路径中删除文件名并查询该文件而不是文件路径并将文件路径存储在不同的列中(假设您使用的是关系数据库)。

编辑

根据您对另一个答案的评论,我会坚持使用 SQL Server。据我了解,您希望自动“编目”放置在该文件夹中的 PDF,您可以通过编写一个简单的windows service来做到这一点。从该 Windows 服务中,您可以使用 ORM(如 Entity Framework)或 ADO.net 将您的更改持久保存到数据库中。从您希望显示结果的应用程序(无论是 Web 应用程序还是 Win 表单应用程序),您只需查询数据库中的正确列

资源:

实体框架

Linq 到实体

于 2012-08-14T08:04:08.913 回答
0

阅读有关使用数据库的一些 ORM。例如,实体框架。

于 2012-08-14T08:19:38.913 回答
0
    private string[,] GetImagesFromServerFolder()
    {
        IntPtr token;
        if (
            !NativeMethods.LogonUser([Server_Login_Name], [Server_Location],
                                     [Server_Login_Password], NativeMethods.LogonType.NewCredentials,
                                     NativeMethods.LogonProvider.Default, out token))
        {
            throw new Win32Exception();
        }

        try
        {
            IntPtr tokenDuplicate;

            if (!NativeMethods.DuplicateToken(
                token,
                NativeMethods.SecurityImpersonationLevel.Impersonation,
                out tokenDuplicate))
            {
                throw new Win32Exception();
            }

            try
            {
                using (WindowsImpersonationContext impersonationContext =
                    new WindowsIdentity(tokenDuplicate).Impersonate())
                {
                    /******************* CODE FROM HERE *******************/

                    List<string> files = new List<string>(Directory.GetFiles(_PHYSICAL SERVER LOCATION_));


                    return files;

                    /******************* CODE TO HERE *******************/
                }
            }
            finally
            {
                if (tokenDuplicate != IntPtr.Zero)
                {
                    if (!NativeMethods.CloseHandle(tokenDuplicate))
                    {
                        // Uncomment if you need to know this case.
                        ////throw new Win32Exception();
                    }
                }
            }
        }
        finally
        {
            if (token != IntPtr.Zero)
            {
                if (!NativeMethods.CloseHandle(token))
                {
                    // Uncomment if you need to know this case.
                    ////throw new Win32Exception();
                }
            }
        }
    }  

然后,这将返回所有 .pdf 文件和位置的列表,
然后您可以在数据库中对其进行处理。

然后,运行列表中的所有文件(在您的主要运行方法中);

List<string> file = GetImagesFromServerFolder();  
foreach (var s in file)  
{  
        const string connStr = "INSERT INTO tblPdfLocations (location) VALUES (@location)";
        //Store the connection details as a string
    string connstr =
        String.Format(@"SERVER=[LOCATION]; UID=[USERNAME]; pwd=[PASSWORD]; Database=[DATABASE]");

    //Initialise the connection to the server using the connection string.
    _sqlConn = new SqlConnection(connstr);

        var sqlComm = new SqlCommand(connStr, _sqlConn) {CommandType = CommandType.Text};
        sqlComm.Parameters.Add(new SqlParameter("@location", SqlDbType.VarChar, 50)).Value = s;

        sqlComm.ExecuteNonQuery();
        _sqlConn.Close();
}
于 2012-08-14T08:26:15.617 回答
0

我想提供与提供的其他答案不同的观点,因为 - PDF、Word、JPEG 等文件等文档的存储和检索完全属于“内容管理”(CM)应用程序的领域。尽管在 IT 大世界中相对较新,但这些应用程序已经成熟并提供工业级解决方案。他们使用数据库后端并提供大量设施——您感兴趣的是纯粹将 CM 用作内容存储库。您不必查看大供应商(即 Oracle Webcenter)提供的产品 - 有免费且支持良好的替代品,例如 Drupal 和 Joomla。他们每个人都有 API,我认为这些 API 将允许您从第三方应用程序连接到他们的存储库。

您应该寻找一种可以随着公司需求而增长的解决方案,而不是重新发明已经存在的东西。

于 2012-08-14T08:36:13.143 回答