私の WPF アプリは Microsoft.Win32.OpenFileDialog を使用して、開く SQL Server 2008 データベースを選択しています。
それは正常に動作しますが、1 つの問題があります: ダイアログで選択されたデータベースが前回の起動以降に開かれていた場合、ファイルはバックグラウンドで SQL サーバーによって開かれたままになっているようです (自分のアプリと自分のアプリによって開かれていない場合でも)。アプリが再起動されました)。これにより、OpenFileDialog で [OK] をクリックすると、「ファイルは別のアプリケーションで使用されています」という警告が表示され、コンピューターを再起動するまでダイアログを使用してその特定のデータベースを開くことができません。OpenFileDialog が選択したファイルを開こうとすると、別のアプリ (SQL Server) によって既に開かれていることがわかります。OpenFileDialog が選択したファイルを開こうとするのを無効にし、選択したファイルのファイル名をチェックせずに返すにはどうすればよいですか?
私のコードは次のようになります。
public void OpenDatabase() {
// Let user select database to open from file browser dialog
// Configure open file dialog box
var dlg = new Microsoft.Win32.OpenFileDialog();
dlg.FileName = ""; // Default file name
dlg.DefaultExt = ".mdf"; // Default file extension
dlg.Filter = "Databases (.mdf)|*.mdf|All Files|*.*"; // Filter files by extension
dlg.CheckFileExists = false;
dlg.CheckPathExists = false;
// Show open file dialog box
bool? result = dlg.ShowDialog(); // Gives file in use warning second time!
// Process open file dialog box results
if (result == true) {
// Open document
string filename = dlg.FileName;
TryOpenDatabase(filename);
}
}