2016-10-27 15 views
1

のために失敗したことはできません私は私の接続文字列がどのように見える 、データベースのMDFファイルを使用しています、#のWPFアプリケーションC Iを開発している:私はここにはログインで要求されたオープンdatabse、ログインに失敗した、ログインがユーザー

Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\appDataBase.mdf;Integrated Security=True;Connect Timeout=30

置き換える| DataDirectory |ユーザーのappdataフォルダ

データベースファイルがユーザーのAppDataフォルダであり、私は私が クライアントのコンピュータにインストールするとき、それは完全に
に動作しますが、私はアンインストール時に_users APPDATAフォルダへ コピー.mdfファイルのセットアップを作成し、 それを再インストール、私はエラーを取得し、そのファイルを接続することはできませんよ。

Can't open database "C:/users/myusername/appdata/roaming/myapplication/database/appDataBase.mdf" requested by login, login failed, login failed for user..

ファイルがあり、何とかそれはSQLサーバーで使用され、 がそれを開くことができません。また、1つもエラーで失敗し、アプリケーション私は、そのファイルの バックアップを作成しています毎回起動時

System.IO.IOException: The process cannot access the file 'C:\Users\myusername\AppData\Roaming\myapplication\Database\appDataBase.mdf' because it is being used by another process.

誰もが私は私のクライアントコンピュータ上でlocaldb使用する必要があるため、私はドン、私に厳密解を与えることができます」私のアプリケーションをインストールするための余分な設定をしてもらいたいのですが、メインウィンドウの終了イベントでdb接続を閉じるためにコードを変更した後もiasueはiasueに直面しています。

答えて

1

このタイプのことは、そのデータベースを使用しているオブジェクトの1つがまだバックグラウンドで実行されているために発生します。したがって、すべてのデータベース関連のインスタンスも破棄し、catch()のすべてのデータベース関連オブジェクトを閉じてください。

try catchは、エラーが発生している正確な行番号を検出するのに役立ちます。また、どのオブジェクトがエラーになっているかによっても表示されます。

なぜこれが起きているのかを確認するには、タスクマネージャを開き、そこにサービスを見て、データベースのオブジェクトを保持しているサービスを見つけてください。

+0

アプリケーションが起動すると、mdfファイルへの開いている接続を確認する必要がありますか?最後の実行から開いていた場合は切断しますか? –

+0

いいえ、あなたのコードをキャッチしてtryとcatchのすべてのオブジェクトをキャッチして破棄して閉じることはできません。同じ問題が発生することはありません。インスタンスを探して閉じることは良い方法ではありません。あなたはデータベースとの接続を開いているかもしれません。 –

+0

私は研究していましたが、私は(LocalDB)\ v11.0を使用すべきではないことを知りました。代わりに.SQLEXPRESSでなければなりません、私はクライアントコンピュータにSQL Expressをインストールしています。 LocalDB)\ v11.0、 –

関連する問題