Database SQLite是否支持跨多个数据库的事务?

Database SQLite是否支持跨多个数据库的事务?,database,transactions,sqlite,system.data.sqlite,Database,Transactions,Sqlite,System.data.sqlite,我已经做了一些搜索,还阅读了SQLite网站上的FAQ,没有找到我问题的答案 很可能是我的数据库方法有缺陷,但目前,我希望将数据存储在多个SQLite3数据库中,这意味着需要单独的文件。我非常担心由于我的应用程序可能崩溃,或者在我的表中改变数据中间断电。 为了确保数据完整性,我基本上需要这样做: begin transaction modify table(s) in database #1 modify table(s) in database #2 commit, or rollback i

我已经做了一些搜索,还阅读了SQLite网站上的FAQ,没有找到我问题的答案

很可能是我的数据库方法有缺陷,但目前,我希望将数据存储在多个SQLite3数据库中,这意味着需要单独的文件。我非常担心由于我的应用程序可能崩溃,或者在我的表中改变数据中间断电。 为了确保数据完整性,我基本上需要这样做:

begin transaction
modify table(s) in database #1
modify table(s) in database #2
commit, or rollback if error
SQLite支持这一点吗?另外,我正在使用sqlite.net,特别是最新版本,它基于sqlite 3.6.23.1

更新


还有一个问题——这是人们通常添加到单元测试中的东西吗?我总是使用单元测试数据库,但从未遇到过这样的情况。如果是这样,你会怎么做?这几乎就像您必须向方法传递另一个参数,如bool test_transaction,如果是真的,则在数据库访问之间抛出异常。然后在调用后进行测试,确保第一组数据没有进入另一个数据库。但这可能是SQLite测试所涵盖的内容,不应该出现在我的测试用例中。

是的,事务可用于不同的SQLite数据库,甚至在SQLite和sqlserver之间。我已经试过好几次了

一些链接和信息

从这里-

由于SQLite ADO.NET 2.0提供程序支持事务登记,因此不仅可以跨多个SQLite数据源执行事务,还可以跨其他数据库引擎(如SQL Server)执行事务

例如:

using (DbConnection cn1 = new SQLiteConnection(" ... ") )
using (DbConnection cn2 = new SQLiteConnection(" ... "))
using (DbConnection cn3 = new System.Data.SqlClient.SqlConnection( " ... ") )
using (TransactionScope ts = new TransactionScope() )
{
    cn1.Open(); cn2.Open(); cn3.Open();
    DoWork1( cn1 );
    DoWork2( cn2 );
    DoWork3( cn3 );
    ts.Complete();
}
如何附加新数据库:

SQLiteConnection cnn = new SQLiteConnection("Data Source=C:\\myfirstdatabase.db");
cnn.Open();

using (DbCommand cmd = cnn.CreateCommand())
{
  cmd.CommandText = "ATTACH DATABASE 'c:\\myseconddatabase.db' AS [second]";
  cmd.ExecuteNonQuery();

cmd.CommandText = "SELECT COUNT(*) FROM main.myfirsttable INNER JOIN second.mysecondtable ON main.myfirsttable.id = second.mysecondtable.myfirstid";


  object o = cmd.ExecuteScalar();

}

是的,SQLite明确支持多数据库事务(有关技术详细信息,请参阅)。然而,有一个相当大的警告。如果数据库文件位于中,则:

涉及对多个连接数据库进行更改的事务 对于每个数据库都是原子的,但不是所有数据库都是原子的 数据库作为一个集合


我认为您不想将此添加到单元测试中。这就好像如果事务运行良好,就没有必要反复测试它们。只需做一些初始测试,以确保插入、更新、回滚等是正确的,并且您可以继续。好的,我认为这将是最好的。完美的我仍然需要编写代码来跨多个数据库执行事务,但我已经接近验证这一点了!:)该链接已断开。@BrianMinton已使用archive.org链接更新。原版是404。