我有一个PC.sdf与我合作的文件.我关闭连接,我需要删除它.
我这样打开连接:
bool OpenConn()
{
try
{
Conn = new SqlCeConnection(String.Format(@"Data Source={0}\{1}", PathI, "PC.SDF"));
Conn.Open();
return true;
}
catch
{
//MessageBox.Show(err.Message, "Connetion error");
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我这样关闭它:
Conn.Close();
Conn.Dispose();
Run Code Online (Sandbox Code Playgroud)
我试着像这样删除它:
if (File.Exists(@"\myPath\PC.sdf"))
File.Delete(@"\myPath\PC.sdf");
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误:file in use by another process.可能是导致此错误的原因,我该如何解决?
您可以尝试通过运行强制垃圾收集
GC.Collect();
Run Code Online (Sandbox Code Playgroud)
在关闭并处置数据库对象后执行此操作。
当然,只有当这是对该数据库文件的唯一引用时,这才有效。
编辑:回答关于您不应该使用 GC.Collect 来“修复”其他问题的评论。
我不认为这是因为另一个问题。垃圾收集器在运行时选择的不确定时间运行。这意味着您不能依赖在以下几行之间处理您的对象。
Conn.Dispose();
//Nothing says GC will run exactly now
File.Delete(@"C:\Some-file-used-by-Conn.db");
Run Code Online (Sandbox Code Playgroud)
您的选择是强制垃圾收集或以某种方式延迟删除。