これはテストしていませんが、DataDirectory置換文字列を使用できます。
string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\abc.mdb;Jet OLEDB:Database Password=password";
それからあなたはすることができます
AppDomain.CurrentDomain.SetData("DataDirectory", @"D:\MyApp");
次のKB 記事に記載されているとおり:
|データディレクトリ| 置換文字列のサポート
|データディレクトリ| (パイプ記号で囲まれている) は、データベース パスを示す置換文字列です。したがって、コードに絶対パスを含める必要はありません。コードにフル パスを含めると、データベースのフル パスが別の場所でシリアル化される可能性があるため、問題が発生する可能性があります。|データディレクトリ| また、置換文字列を使用すると、プロジェクトの共有とアプリケーションのデプロイが容易になります。
たとえば、コードに完全なパスを含めると、アプリケーションは次の接続文字列を持つことができます。
データ ソース = c:\program files\MyApp\Mydb.sdf
|DataDirectory| を使用する場合 置換文字列、アプリケーションは次の接続文字列を持つことができます。
データ ソース = |DataDirectory|\Mydb.sdf
DataDirectory プロパティを設定するには、AppDomain.SetDataメソッドを呼び出します。DataDirectory プロパティを設定しない場合、データベース フォルダーへのアクセスに次の既定の規則が適用されます。
- ユーザーのコンピューター上のフォルダーに配置されるアプリケーションの場合、データベース フォルダーはアプリケーション フォルダーを使用します。
- ClickOnce で実行されているアプリケーションの場合、データベース フォルダーは、作成された特定のデータ フォルダーを使用します。