如何将PDF文件路径添加到SQL数据库并访问它们? ( C# )

时间:2012-08-14 07:59:57

标签: c# sql

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

如果你能给我一些解决它的想法,我将不胜感激。

4 个答案:

答案 0 :(得分:1)

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

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

修改

根据您对其他答案的评论,我会坚持使用SQL服务器。根据我的理解,您希望自动“删除”放在该文件夹中的PDF,您可以通过编写一个简单的windows service来完成此操作。从该Windows服务,您可以使用ORM(如实体框架)或ADO.net将更改保留到数据库中。从您希望显示结果的应用程序(无论是Web应用程序还是Win表单应用程序,无论如何),您只需查询数据库中的正确列

资源:

Entity Framework

Linq to Entities

答案 1 :(得分:0)

阅读一些与数据库一起使用的ORM。例如,Entity Framework。

答案 2 :(得分: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();
}

答案 3 :(得分:0)

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

您应该考虑一个可以根据公司的要求发展的解决方案,而不是重新发明已经存在的东西。