Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在F中释放SQLite资源#_Sqlite_F#_System.data.sqlite_Fsi - Fatal编程技术网

在F中释放SQLite资源#

在F中释放SQLite资源#,sqlite,f#,system.data.sqlite,fsi,Sqlite,F#,System.data.sqlite,Fsi,考虑下面的F#脚本,它创建了一个简单的SQLite数据库和表,然后应该删除它。但是,SQLite obejct似乎没有被正确地处理,也没有释放其对文件的锁定 #r@“C:\Path\To\System.Data.SQLite.dll” open System.Data.SQLite 让createTable() 使用db=newsqliteconnection(@“Data Source=test.sqlite”) db.Open() let command=new SQLiteCommand(

考虑下面的F#脚本,它创建了一个简单的SQLite数据库和表,然后应该删除它。但是,SQLite obejct似乎没有被正确地处理,也没有释放其对文件的锁定

#r@“C:\Path\To\System.Data.SQLite.dll”
open System.Data.SQLite
让createTable()
使用db=newsqliteconnection(@“Data Source=test.sqlite”)
db.Open()
let command=new SQLiteCommand(“创建表测试项(ColA ColB)”,db)
command.ExecuteNonQuery()|>忽略
db.Close()
createTable()
//System.IO.IOException:进程无法访问文件“[…]\test.sqlite”
//因为它正被另一个进程使用。
System.IO.File.Delete(“test.sqlite”)
我在F#方面相当差劲,但我对
use
的理解是,对象的资源在超出范围时将被处置,但在本例中似乎并非如此。我尝试调用
Dispose()
,但也没有效果


有人能告诉我如何在F#中正确处理SQLite对象吗

还需要处理
SQLiteCommand
,因为它还根据文档实现了
IDisposable


使用
use
binding而不是
let
for
command
应该可以解决这个问题。

SQLiteCommand
也实现
IDisposable
吗?在这种情况下,您还应该使用
use
binding而不是
let
。这就是问题所在!假设这是一个F#问题,但实际上是个m问题y对System.Data.SQLite一无所知。如果你发布了一个答案,我会很高兴地将其标记为已接受。@user1393477我发现的一个避免这种情况的有效方法是只将
new
use
一起使用,如果你没有为实现
IDisposable
的类指定
new
,你会得到一个警告