我正在尝试在我们的支持中实现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)
知道它可能是什么吗? 提前谢谢!
答案 0 :(得分:0)
按照以下步骤执行交易。
- 调用SqlConnection对象的BeginTransaction方法以标记事务的开始。
- [...]
- 执行所需的命令。
- 调用SqlTransaction对象的Commit方法来完成事务,或者调用Rollback方法来结束事务。
醇>
答案 1 :(得分:0)
我发现了问题,所以将答案作为参考发布。
我们在包装器db类中打开了事务范围。如果我删除了事务范围定义,它就像宣传的那样工作。 所以bug在我身边,或者显然事务范围与system.data.sqlite不兼容(因为当我不尝试启动另一个事务时它也会挂起)。