gpt4 book ai didi

sqlite - 在 F# 中释放 SQLite 资源

转载 作者:行者123 更新时间:2023-12-03 18:35:06 25 4
gpt4 key购买 nike

考虑以下 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 对象?

最佳答案

SQLiteCommand也需要处理,因为它还实现了 IDisposable根据文档:https://www.devart.com/dotconnect/sqlite/docs/Devart.Data.SQLite~Devart.Data.SQLite.SQLiteCommand_members.html (通过 System.ComponentModel.Component

使用 use绑定(bind)而不是 let对于 command应该解决问题。

关于sqlite - 在 F# 中释放 SQLite 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30655252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com