C# で db アプリケーションを開発していますが、現在の接続文字列は
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Shop.accdb;Persist Security Info=False;"
データベースがDではなくプロジェクトのフォルダーにあるように変更するにはどうすればよいですか? つまり、プロジェクトを友人に送信することを計画しているので、完全なパスではなく、プロジェクトのフォルダーのみを含めます。
前もって感謝します!
C# で db アプリケーションを開発していますが、現在の接続文字列は
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Shop.accdb;Persist Security Info=False;"
データベースがDではなくプロジェクトのフォルダーにあるように変更するにはどうすればよいですか? つまり、プロジェクトを友人に送信することを計画しているので、完全なパスではなく、プロジェクトのフォルダーのみを含めます。
前もって感謝します!
接続文字列を次のように変更します
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Shop.accdb;" +
"Persist Security Info=False;";
|DataDirectory|
(WinForms アプリの場合) フレームワークによって現在のディレクトリの値に設定される置換文字列です。
コードでは(データアクセスの前に)、好きなものに変更できます
AppDomain.CurrentDomain.SetData("DataDirectory", @"D:\temp");
ただし、その値を変更する理由がパーミッションの問題である場合は、プログラムと同じフォルダー (C:\program files) にデータベースを格納する際にも同じ問題が発生することに注意してください。制限付き。最善の方法は、データベースを次のサブフォルダーに保存することです。C:\PROGRAMDATA\<myAppDatabaseFolder>
string myFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
myFolder = Path.Combine(myFolder, "myAppDatabaseFolder);
AppDomain.CurrentDomain.SetData("DataDirectory", myFolder);
(セットアップ手順で作成されると思われるMyAppDatabaseFolder
ため、フォルダーの存在を確認していません)