SQLite Transaction因.NET而失败

时间:2016-06-01 09:56:41

标签: vb.net sqlite transactions

我正在尝试在我们的支持中实现SQLite并遇到一个问题,我得到超时和数据库被锁定在这个简单代码中的异常

try
  lDb.ConnectionString = String.Format("Data Source={0};Version=3;Pooling=True;Max Pool Size=100;", TextBoxSqlite.Text)
  ldb.Connection = New SQLiteConnection(ldb.ConnectionString)
  ldb.Connection.Open()
  lDb.Connection.BeginTransaction()

  for lIndex As Integer = 1 To 100
    lQuery = String.Format("INSERT INTO [TableTest] VALUES ('{0}','{1}','{2}') ", lIndex , lIndex , lIndex )

    lCommand = New SQLiteCommand()
    lCommand.CommandText = lQuery
    lCommand.Connection = lDb.Connection
    lDb.ExecuteCommand(lCommand)
  next

   ' if ok'
   db.CommitTransaction()
catch ex as exception
  ' if failed rollback'
  db.RollbackTransaction()
end try

它运行一次,在第二次运行时它挂起几秒钟并抛出异常。 第一个插入没有(正确地)插入。

如果我删除了BeginTransaction行,它就像宣传的那样工作。

我在最新的3.12版本中使用.NET SQlite(System.Data.SQLite)

知道它可能是什么吗? 提前谢谢!

2 个答案:

答案 0 :(得分:0)

documentation说:

  

按照以下步骤执行交易。

     
      
  1. 调用SqlConnection对象的BeginTransaction方法以标记事务的开始。
  2.   
  3. [...]
  4.   
  5. 执行所需的命令。
  6.   
  7. 调用SqlTransaction对象的Commit方法来完成事务,或者调用Rollback方法来结束事务。
  8.   

答案 1 :(得分:0)

我发现了问题,所以将答案作为参考发布。

我们在包装器db类中打开了事务范围。如果我删除了事务范围定义,它就像宣传的那样工作。 所以bug在我身边,或者显然事务范围与system.data.sqlite不兼容(因为当我不尝试启动另一个事务时它也会挂起)。