SQLiteデータベースを使用するアプリケーションがあり、すべてが正常に機能します。現在、2番目のSQLiteデータベースを必要とする新しい機能を追加するプロセスを進めていますが、異なるデータベースのテーブルを結合する方法を見つけるのに苦労しています。
誰かがこれで私を助けてくれれば、本当に感謝しています!
編集: この質問 を参照してください。受け入れられた回答に記載されているように、データベースを接続するときに言語に適応できる例があります。
Sqliteのビルドで [〜#〜] attach [〜#〜] が activated の場合(mostbuilds)、 [〜#〜] attach [〜#〜] キーワードを使用して、現在の接続に別のデータベースファイルを添付できます。 アタッチできるdbの数の制限 はコンパイル時の設定( SQLITE_MAX_ATTACHED )であり、現在デフォルトは10ですが、これもビルドによって異なります。グローバル制限は125です。
attach 'database1.db' as db1;
attach 'database2.db' as db2;
キーワードを使用して、接続されているすべてのデータベースを表示できます
.databases
その後、次のことができるはずです。
select
*
from
db1.SomeTable a
inner join
db2.SomeTable b on b.SomeColumn = a.SomeColumn;
「[[]データベース名main
およびtemp
は、プライマリデータベースおよび一時テーブルおよびその他の一時データオブジェクトを保持するデータベース用に予約されています。これらのデータベース名は、すべてのデータベース接続に存在します添付には使用しないでください」。
この質問を完了するC#の例を次に示します
/// <summary>
/// attachSQL = attach 'C:\\WOI\\Daily SQL\\Attak.sqlite' as db1 */
/// path = "Path of the sqlite database file
/// sqlQuery = @"Select A.SNo,A.MsgDate,A.ErrName,B.SNo as BSNo,B.Err as ErrAtB from Table1 as A
/// inner join db1.Labamba as B on
/// A.ErrName = B.Err";
/// </summary>
/// <param name="attachSQL"></param>
/// <param name="sqlQuery"></param>
public static DataTable GetDataTableFrom2DBFiles(string attachSQL, string sqlQuery)
{
try
{
string conArtistName = "data source=" + path + ";";
using (SQLiteConnection singleConnectionFor2DBFiles = new SQLiteConnection(conArtistName))
{
singleConnectionFor2DBFiles.Open();
using (SQLiteCommand AttachCommand = new SQLiteCommand(attachSQL, singleConnectionFor2DBFiles))
{
AttachCommand.ExecuteNonQuery();
using (SQLiteCommand SelectQueryCommand = new SQLiteCommand(sqlQuery, singleConnectionFor2DBFiles))
{
using (DataTable dt = new DataTable())
{
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(SelectQueryCommand))
{
adapter.AcceptChangesDuringFill = true;
adapter.Fill(dt);
return dt;
}
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Use Process Exception method An error occurred");
return null;
}
}
さて、SQLiteの経験はあまりありません。1回のクエリで両方のデータベースにアクセスする必要があります。
あなたは次のようなものを持つことができます:
select name from DB1.table1 as a join DB2.table2 as b where a.age = b.age;
SQLServerのようなデータベースでは、この階層形式で他のデータベースにアクセスできますが、これはSQLiteでも機能するはずです。
複数のデータベースでsqliteのインスタンスを開始できると思います!