我有一个使用SQLite数据库的应用程序,一切都按照应有的方式工作。我现在正在添加需要第二个SQLite数据库的新功能,但我很难弄清楚如何从不同的数据库中连接表。
如果有人可以帮我解决这个问题,我真的很感激!
编辑:有关示例案例,请参阅this question,以便在附加数据库时根据接受的答案提及您的语言。
答案 0 :(得分:111)
如果您的Sqlite版本中ATTACH为activated(它应该位于大多数版本中),您可以使用{{将另一个数据库文件附加到当前连接3}}关键字。 ATTACH是编译时设置(limit on the number of db's that can be 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
是为主数据库和数据库保留的,用于保存临时表和其他临时数据对象。每个数据库都存在这两个数据库名称连接,不应用于附件“。
答案 1 :(得分:3)
这是完成此问题的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;
}
}
答案 2 :(得分:2)
好吧,我对SQLite没有多少经验,你必须在一个查询中访问这两个数据库。
您可以拥有以下内容:
select name from DB1.table1 as a join DB2.table2 as b where a.age = b.age;
在像SQLServer这样的数据库中,您可以以这种分层方式访问其他数据库,这也适用于SQLite。
我认为您可以启动一个包含1个以上数据库的sqlite实例!