web-dev-qa-db-ja.com

データベースファイルへの相対パスを持つ接続文字列

Winformsアプリのsdfデータベースからデータをロードします。データベースファイルへのフルパスを使用します。例:

conn = new SqlCeConnection

{

ConnectionString ="Data Source=F:\\My Documents\\Project1\\bin\\Debug\\Database.sdf"

};

データベースファイルへの相対パスを使用したいです。例えば。フォルダーF:\ My Documents\Project1\bin\Debug\Data\file.sdfにsdfファイルがあり、接続文字列に相対パスを使用します。何かアドバイス ?ありがとうございました。

37
Martin

相対パス:

ConnectionString = "Data Source=|DataDirectory|\Database.sdf";

DataDirectoryを実行可能ファイルのパスとして変更します。

string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
string path = (System.IO.Path.GetDirectoryName(executable));
AppDomain.CurrentDomain.SetData("DataDirectory", path);
87
Nime Cloud

以下のようなデータベースファイルが存在する場合は、このコードを作業ディレクトリに試してください。

D:\ HMProject\DataBase\HMProject.sdf

string Path = Environment.CurrentDirectory;
string[] appPath =  Path.Split(new string[] { "bin" }, StringSplitOptions.None);
AppDomain.CurrentDomain.SetData("DataDirectory", appPath[0]);

。sdfファイルの接続文字列

<add name="LocalDB" connectionString="metadata=res://*/Client.HMProject.csdl|res://*/Client.HMProject.ssdl|res://*/Client.HMProject.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\Database\HMProjectDB.sdf;Password=HMProject;Persist Security Info=False;&quot;" providerName="System.Data.EntityClient" />

ありがとう

ck.Nitin(ティンティン)

6
Ck.Nitin

何に関連して、あなたのアプリケーション?その場合、次のコマンドを使用してアプリケーションの現在のパスを取得できます。

System.Environment.CurrentDirectory 

そして、接続文字列に追加します

4
RC1140

接続文字列の相対パスに関するいくつかの奇妙なエラーの後、ここに投稿する必要があると感じました。

「| DataDirectory |」を使用する場合または「〜」を使用して、「../」を使用してステップアップおよびステップアウトすることはできません!

例は、プロジェクトの1つに配置された同じlocaldbファイルにアクセスする複数のプロジェクトを使用しています。

"〜/../ other"および "| DataDirectory | /../ other"は失敗します

それが明確に書かれていても MSDNで 発見するのが少し難しいためここで見つけることができなかった場所で与えられたエラー。

3
tomg
   <?xml version="1.0"?>  
<configuration>  
  <appSettings>  
    <!--FailIfMissing=false -->  
    <add key="DbSQLite" value="data source=|DataDirectory|DB.db3;Pooling=true;FailIfMissing=false"/>  
  </appSettings>  
</configuration>  
1
william

これはweb.configファイルで行いました。 Sobhanの回答に追加しました。ありがとうございます。

<connectionStrings>
    <add name="listdb" connectionString="Data Source=|DataDirectory|\db\listdb.sdf"/>
  </connectionStrings>

「db」は「App_Data」ディレクトリではなく、私のデータベースディレクトリになります。

そして通常通りに開きます:

var db = Database.Open( "listdb");

0
pat

あなたが探しているものとまったく同じコードブロックを試してみてください:

SqlConnection conn = new SqlConnection
{
    ConnectionString = "Data Source=" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\Database.sdf"
};
0
Elias Hossain

構成ファイルで相対パスを指定します

ConnectionString = "Data Source=|DataDirectory|\Database.sdf";

DataDirectoryを実行可能なパスに変更します

string path = AppDomain.CurrentDomain.BaseDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", path);

EntityFrameworkを使用している場合、ContextクラスでDataDirectoryパスを設定できます。

0
Sobhan

Windows Formsアプリケーションに接続されているデータベースの相対ファイルパスを指定しようとすると、同じ問題が発生しました。 MicrosoftからWindowsフォームにデータソースを追加するための指示(たとえば、 Accessデータベースの接続用 )を実行することで、問題を解決できました。

この方法を使用すると、Visual Studioは手動で設定するのではなく、データベースへの相対ファイルパスを設定します。データベースがアプリケーションの外部にある場合、データベースのコピーが作成され、アプリケーションの適切な場所に追加されます。接続文字列はApp.configやSettings.settings、またはスクリプトのいずれかで手動で変更できますが、この方法はエラーが発生しやすいことがわかりました。代わりに、一般的にマイクロソフトの指示に従うことが最善であることがわかりました。

0
Billy Raseman

これは私のために働いた:

string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
    + HttpContext.Current.Server.MapPath("\\myPath\\myFile.db")
    + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";

XLSXファイルを照会するので、データソース以外の接続文字列の他の要素について心配する必要はありません。

だから私の答えは:

HttpContext.Current.Server.MapPath("\\myPath\\myFile.db")
0
styler1972