我必须构建一个可以从本地网络上的文件夹中搜索和显示PDF文件的软件。 我的主管要求有一个数据库,并在那里存储PDF文件的路径(由于数量很大,不存在PDF本身),所以我可以从软件中搜索并打开它们。
如果你能给我一些解决它的想法,我将不胜感激。
答案 0 :(得分:1)
你还没有解决过吗?您可以拥有一个应用程序,例如服务甚至可以轮询/手动查看指定文件夹的命令行应用程序,从那里您将获得完整的文件位置并将其持久保存到您的数据库中。当您需要搜索PDF时,您可以对数据库执行符合条件的PDF查询。
您甚至可以从文件路径中删除文件名并在其上查询而不是文件路径,并将文件路径存储在不同的列中(假设您使用的是关系数据库)。
修改强>
根据您对其他答案的评论,我会坚持使用SQL服务器。根据我的理解,您希望自动“删除”放在该文件夹中的PDF,您可以通过编写一个简单的windows service来完成此操作。从该Windows服务,您可以使用ORM(如实体框架)或ADO.net将更改保留到数据库中。从您希望显示结果的应用程序(无论是Web应用程序还是Win表单应用程序,无论如何),您只需查询数据库中的正确列
资源:
答案 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,我假设它允许您从第三方应用程序连接到它们的存储库。
您应该考虑一个可以根据公司的要求发展的解决方案,而不是重新发明已经存在的东西。