2

Access データベースの読み取りと書き込みを行う C# アプリがあります。ユーザーごとに 1 つのデータベース ファイルがあります。私の意図は、起動時にユーザーの My Documents フォルダーに MDB が存在するかどうかを確認し、MDB が見つからない場合は、テンプレート MDB をそのフォルダーにコピーすることです。

既にテンプレート MDB をプロジェクトに追加し、それを独自のフォルダーに配置しましたPackaged。ただし、このPackagedフォルダーは IntelliSense に表示されないため、コードから参照できません。

私の意図はFile.Copy、MDB をコピーするために使用することでしたが、コードで MDB にアクセスできないため、ファイル パスを特定できません。.exe にパッケージ化されているだけの場合、おそらくファイル パスはありませんか?

可能であれば別の MDB を配布したくない場合、これを達成するための最良の方法は何でしょうか?

4

2 に答える 2

2

過去に、MDB を埋め込みリソースにして、必要に応じて (存在しない場合は) ディスクに書き込むことで、これを行いました。

埋め込みリソースをファイルに書き込む方法の詳細は次のとおりです。

于 2013-01-09T17:57:50.017 に答える
1

テンプレート MDB の環境パスの 1 つを使用する必要があります。ApplicationData または Documents and Settings\Username\Local Settings\ または他のいずれかのように。ローカル ユーザー データは、ユーザー固有のデータに最適な方法です。最初のコードで、最初の実行でファイルが存在するかどうかを確認します。存在する場合はテンプレートをコピーし、存在しない場合はコピーします。

こうすることで、ユーザーは完全な読み取りおよび書き込みアクセス権を持ち、セキュリティ上の問題なくファイルをコピーまたは複製することができます。これらの環境変数には、

  Environment.GetEnvironmentVariable  

また、単純な DatabaseAvailable キーを持つ特定のアプリケーションのレジストリ設定を読み書きし、yes または no に切り替えることもできます。

MDB をリソースとして埋め込み、必要に応じて書き込むこともできます。

于 2013-01-09T18:01:25.893 に答える