0

C# で db アプリケーションを開発していますが、現在の接続文字列は

@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Shop.accdb;Persist Security Info=False;"

データベースがDではなくプロジェクトのフォルダーにあるように変更するにはどうすればよいですか? つまり、プロジェクトを友人に送信することを計画しているので、完全なパスではなく、プロジェクトのフォルダーのみを含めます。

前もって感謝します!

4

1 に答える 1

3

接続文字列を次のように変更します

 @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Shop.accdb;" + 
  "Persist Security Info=False;";

|DataDirectory|(WinForms アプリの場合) フレームワークによって現在のディレクトリの値に設定される置換文字列です。
コードでは(データアクセスの前に)、好きなものに変更できます

 AppDomain.CurrentDomain.SetData("DataDirectory", @"D:\temp");

MSDN のこのスレッドを参照してください

ただし、その値を変更する理由がパーミッションの問題である場合は、プログラムと同じフォルダー (C:\program files) にデータベースを格納する際にも同じ問題が発生することに注意してください。制限付き。最善の方法は、データベースを次のサブフォルダーに保存することです。C:\PROGRAMDATA\<myAppDatabaseFolder>

string myFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
myFolder = Path.Combine(myFolder, "myAppDatabaseFolder);
AppDomain.CurrentDomain.SetData("DataDirectory", myFolder);

(セットアップ手順で作成されると思われるMyAppDatabaseFolderため、フォルダーの存在を確認していません)

于 2013-09-20T07:27:06.877 に答える