考虑以下 F# 脚本,该脚本创建一个简单的 SQLite 数据库和表,然后应将其删除。但是,SQLite 对象似乎没有被正确处理,并且没有释放它对文件的锁定。
#r @"C:\Path\To\System.Data.SQLite.dll"
open System.Data.SQLite
let createTable() =
use db = new SQLiteConnection(@"Data Source=test.sqlite")
db.Open()
let command = new SQLiteCommand("CREATE TABLE TestItems (ColA ColB)", db)
command.ExecuteNonQuery() |> ignore
db.Close()
createTable()
// System.IO.IOException: The process cannot access the file '[...]\test.sqlite'
// because it is being used by another process.
System.IO.File.Delete("test.sqlite")
我在 F# 方面很差,但我的理解use
是对象的资源会在超出范围时被处理掉,但在这种情况下似乎并非如此。我也试过打电话Dispose()
也无济于事。
谁能阐明我如何在 F# 中正确处理 SQLite 对象?