最新バージョンかどうかを確認するアプリケーションがあります。File.Copy
そうでない場合は、アプリケーションに接続されている DB を新しいもの (変更されている場合とされていない場合があります) に置き換えるために使用して、それ自体を更新します。データが削除されないようにするために、データベースが削除される前にすべてのデータを 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 が解放されないのはなぜですか? (走らなければ問題ない)