私はいくつかのSQL Serverデータベースとやり取りするC#プログラムを作っています。問題は、データベース(dbA)に接続し、この接続を閉じて、別のデータベースを別のデータベース(dbB)に開き、dbAの復元を実行すると、そのデータベース(dbA)が使用中であることをSqlExceptionがトリガします。しかし、私はプログラムを実行し、dbBにのみ接続する場合、私は問題なく、最初の接続が格納されているように他のデータベースを復元することができます。とにかく、ここでの接続を開閉する必要があり、コードは次のとおりです。C# - SQL接続が閉じない
private bool CheckConnection()
{
bool res = false;
string conString = string.Empty;
if (!String.IsNullOrEmpty(serverBox.Text) && !String.IsNullOrEmpty(dbBox.Text))
{
conString = ConcatConString(dbBox.Text);
using (SqlConnection conn = new SqlConnection(conString))
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
res = true;
}
}
}
return res;
}
ADO.NETは接続プールを使用します。つまり、接続は「リセット」され、再利用のためにプールに保持されます。アプリケーションを終了するか、復元する前にすべてのクライアントを切断する必要があります。 –
スタックトレースを使用して完全な例外の詳細を追加してください。また、このメソッドを呼び出すコードを共有してください。 –
復元はすべてのユーザーが保存しようとしていたものを失うことになるので、これは大きな問題ではありません。最良の選択肢は、データベースをシングルユーザーモードにすることです。[ここに示す](http://dba.stackexchange.com/questions/101917/unable-to-restore-database-backup-because-it-is-accessed- by-other-connection)を使用して、アクティブなトランザクションをロールバックし、修復者を実行してデータベースをマルチユーザーモードに戻します。 –