C# で System.Data.SQLite を使用して相対パスでデータベースファイルに接続する方法
C# で SQLite 接続文字列に相対パスを指定する方法
Data Source プロパティを使用する
接続文字列で Data Source
プロパティを使用すると、データベースファイルへのパスを指定できます。相対パスを指定するには、..
や .
などの記号を使用できます。
例:
string connectionString = @"Data Source=.\MyDatabase.sqlite";
この例では、MyDatabase.sqlite
という名前のデータベースファイルが、現在の作業ディレクトリにあることを指定しています。
Uri プロパティを使用する
接続文字列で Uri
プロパティを使用すると、データベースファイルへの URI を指定できます。相対パスを指定するには、file://
スキームと相対パスを使用できます。
string connectionString = @"Uri=file://.\MyDatabase.sqlite";
この例は、Data Source
プロパティの例と同じです。
FileName プロパティと AttachDBFilename プロパティを使用する
FileName
プロパティと AttachDBFilename
プロパティを使用すると、データベースファイルへのパスと、接続時にデータベースファイルをどのように添付するかを指定できます。
string connectionString = @"Data Source=:memory:;FileName=.\MyDatabase.sqlite;AttachDBFilename=MyDatabase";
この例では、MyDatabase.sqlite
という名前のデータベースファイルが、現在の作業ディレクトリにあることを指定しています。データベースファイルは、メモリ内のデータベースに添付されます。
注意事項
- 相対パスを使用する場合、データベースファイルは、アプリケーションを実行するユーザーのアカウントに対して読み取り可能な必要があります。
- 相対パスを使用する場合、アプリケーションを別の場所に移動すると、データベースファイルへのパスが変更される可能性があります。
using System;
using System.Data.SQLite;
namespace SqliteExample
{
class Program
{
static void Main(string[] args)
{
// データベースファイルへの相対パス
string databasePath = @".\MyDatabase.sqlite";
// 接続文字列の作成
string connectionString = @"Data Source=" + databasePath;
// SQLite 接続の作成
using (var connection = new SQLiteConnection(connectionString))
{
// データベースへの接続を開く
connection.Open();
// クエリの実行
var command = new SQLiteCommand("SELECT * FROM MyTable", connection);
var reader = command.ExecuteReader();
// 結果の読み取り
while (reader.Read())
{
Console.WriteLine(reader["Name"]);
}
// データベースへの接続を閉じる
connection.Close();
}
}
}
}
このコードを実行するには、以下の手順が必要です。
- Visual Studio などの C# 開発環境で新しいプロジェクトを作成します。
- NuGet パッケージマネージャーを使用して、
System.Data.SQLite
パッケージをインストールします。 - プロジェクトをビルドして実行します。
このコードは、MyDatabase.sqlite
という名前のデータベースファイルに接続し、MyTable
テーブルの内容を読み取ります。データベースファイルは、プロジェクトファイルと同じディレクトリにある必要があります。
変更
- データベースファイルの名前や場所を変更するには、コード中の
databasePath
変数を変更します。 - 異なるテーブルからデータを読み取るには、
SELECT
クエリを変更します。
他の方法
環境変数を使用する
環境変数を使用して、データベースファイルへのパスを指定できます。
// 環境変数の設定
Environment.SetEnvironmentVariable("SQLITE_DB_PATH", @".\MyDatabase.sqlite");
// 接続文字列の作成
string connectionString = @"Data Source=" + Environment.GetEnvironmentVariable("SQLITE_DB_PATH");
// 接続の確立
// ...
この方法を使用するには、SQLITE_DB_PATH
という名前の環境変数を作成し、データベースファイルへのパスを設定する必要があります。
アプリケーション設定ファイルを使用する
アプリケーション設定ファイルを使用して、データベースファイルへのパスを指定できます。
<configuration>
<appSettings>
<add key="DatabasePath" value=".\MyDatabase.sqlite" />
</appSettings>
</configuration>
// 設定ファイルの読み込み
var config = ConfigurationManager.AppSettings;
// 接続文字列の作成
string connectionString = @"Data Source=" + config["DatabasePath"];
// 接続の確立
// ...
この方法を使用するには、app.config
という名前のアプリケーション設定ファイルを作成し、DatabasePath
というキーを使用して、データベースファイルへのパスを設定する必要があります。
パス解決を使用する
Path.GetFullPath()
メソッドを使用して、相対パスを絶対パスに変換できます。
// 相対パスの取得
string relativePath = @".\MyDatabase.sqlite";
// 絶対パスの取得
string absolutePath = Path.GetFullPath(relativePath);
// 接続文字列の作成
string connectionString = @"Data Source=" + absolutePath;
// 接続の確立
// ...
この方法を使用するには、Path
クラスの GetFullPath()
メソッドを使用して、相対パスを絶対パスに変換する必要があります。
どの方法を使用するべきか
どの方法を使用するべきかは、アプリケーションの要件によって異なります。
- 複数のデータベースファイルに接続する必要がある場合は、環境変数またはアプリケーション設定ファイルを使用するのが便利です。
- データベースファイルが頻繁に変更される場合は、相対パスを使用するのが便利です。
- データベースファイルがアプリケーションと同じ場所に存在する場合は、
Path.GetFullPath()
メソッドを使用するのが便利です。
c# sqlite connection-string