我有一个应用程序可以检查它是否是最新版本。如果没有,它会通过使用File.Copy
新的数据库替换附加到应用程序的数据库来更新自身(可能已经或可能没有对其进行更改)。为了防止数据被删除,我创建了一个备份系统,该系统在删除数据库之前将所有数据写入 XML 文件,并在复制数据库后恢复数据。
但是,我遇到了该File.Copy
方法的问题,因为弹出一个错误告诉我.MDF
正在被另一个进程使用。
有人告诉我停止 SQL Server 会起作用,但它没有。我也被告知我可以使用 SMO,但也无法做到这一点。由于这看起来如此接近完成,SMO 似乎也没有必要了。
我的代码是这样的:
'This is the backup. I make sure to close the SQL Connection when the process is complete.
Dim db As String = "C:\ACE DB\localACETest.mdf"
Dim dbLog As String = "C:\ACE DB\localACETest_log.ldf"
If File.Exists(db) = True Then
'Backup process
'...
End If
'"Data/localACETest.mdf" referenced below is the file located inside of my application that is used to overwrite the other MDF; it is NOT the .MDF I'm looking to replace.
Directory.CreateDirectory("C:\Random Directory\")
File.Copy("Data/localACETest.mdf", db, True) 'This is the line where I get the error
File.Copy("Data/localACETest_log.ldf", dbLog, True)
success = False
...
编辑: 我已将问题缩小到备份我的数据的方法。我正在使用以下连接字符串:
Private Const _sqlDB As String = "Data Source=(localdb)\v11.0;Initial Catalog=localACETest;Integrated Security=True; _
AttachDbFileName=C:\ACE DB\localACETest.mdf"
我打开 SQL,运行一个命令,然后关闭它:
Using connection = New SqlConnection(_sqlDB)
connection.Open()
...
connection.close()
为什么这不会从流程中释放 MDF?(当我不运行它时,我没有问题)