0

ローカルネットワーク上のフォルダからPDFファイルを検索して表示できるソフトウェアを構築する必要があります。私の上司はデータベースを持っていて、そこにPDFファイルのパスを保存するように要求していました(大量であるためPDF自体ではありません)ので、ソフトウェアからそれらを検索して開くことができます。

それを解決するためのアイデアをいただければ幸いです。

4

4 に答える 4

1

もう解決してませんか?指定されたフォルダーをポーリング/手動で調べることができるサービスやコマンドラインアプリケーションなどのアプリケーションを使用できます。そこから完全なファイルの場所を取得し、これをデータベースに保持します。PDF を検索する必要がある場合は、基準に一致する PDF のデータベースに対してクエリを実行できます。

ファイルパスからファイル名を取り除き、ファイルパスではなくそれをクエリして、ファイルパスを別の列に格納することもできます (リレーショナル データベースを使用している場合)。

編集

他の回答に対するあなたのコメントに基づいて、私はSQLサーバーに固執します。そのフォルダーにドロップされたPDFを自動的に「カタログ化」したいことを理解していることから、単純なWindowsサービスを作成することでこれを行うことができます。その Windows サービスから、ORM (Entity Framework など) または ADO.net を使用して、変更をデータベースに永続化できます。結果を表示したいアプリケーション (Web アプリや Win フォーム アプリケーションなど) から、DB の正しい列をクエリするだけです。

資力:

エンティティ フレームワーク

エンティティへのリンク

于 2012-08-14T08:04:08.913 に答える
0

PDF、Word、JPEGなどのファイルの保存と取得は「コンテンツ管理」(CM)アプリケーションの領域に十分に組み込まれているため、提供されている他の回答とは異なる視点を提供したいと思います。ITの大きな世界では比較的新しいものですが、これらのアプリケーションは成熟しており、産業用の強力なソリューションを提供します。それらはデータベースバックエンドを使用し、多くの機能を提供します-あなたが興味を持っているのは、純粋にコンテンツリポジトリとしてのCMの使用です。大手ベンダー(つまり、Oracle Webcenter)の製品を見る必要はありません。DrupalやJoomlaなどの無料で十分にサポートされている代替手段があります。それぞれにAPIがあり、サードパーティのアプリケーションからリポジトリに接続できると思います。

あなたはあなたの会社の要件に合わせて成長できるソリューションを検討するべきであり、すでにそこにある何かを再発明することを検討するべきではありません。

于 2012-08-14T08:36:13.143 に答える
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 ファイルと場所のリストが返さ
れます。それを DB に格納できます。

次に、リスト内のすべてのファイルを実行します (メインの実行方法で)。

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 に答える