1

私はこの接続文字列を持っています:

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\Release\DB.accdb"); // Database Connection

文字列に "..\Release\" を含めずにプログラムをデータベースに接続したい。つまり、フォルダーの名前を指定せずに (フォルダーの名前が何であれ)、プログラムにプログラムのフォルダー内のデータベースを検索させたいということです。それはどのように行われますか?

4

2 に答える 2

2

DB をプロジェクトに追加し (追加 -> 既存のアイテム...)、次のように設定Build Actionする必要がありContentます。Copy to Output DirectoryCopy always

ここに画像の説明を入力

その後、次の接続文字列を使用できます。

 string cs = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.mdb;Persist Security Info=False;";

次のコードは、プログラム フォルダーまたはサブフォルダーでデータベース ファイルを検索します。

string programPath = System.IO.Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName;
var dbPath = System.IO.Directory.GetFiles(programPath, "*.accdb", SearchOption.AllDirectories).FirstOrDefault();
string cs = null;
if (!string.IsNullOrEmpty(dbPath))
{
    cs = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;", dbPath);
}
于 2013-10-27T15:47:37.007 に答える
1

おそらく、次のようなものを使用できます

String strAppDir = System.IO.Path.GetDirectoryName(
        System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
String strFullPathToMyFile = System.IO.Path.Combine(strAppDir, "DB.accdb");

参照:

方法: アプリケーション ディレクトリを取得します。

于 2013-10-27T15:46:41.220 に答える