How to force SQLconnection to release a database?
-
21-08-2019 - |
Question
I have written a small application, that can restore a database (C# and SQL2005), but after I have accessed the database, I can't drop it - it says that it is in use.. I guess it has to do with the SQLconnection-pooling, but can I force it to relase the database??
Solution
Specify 'Pooling=False' in the connection string.
OTHER TIPS
Dispose your SqlConnection object.
If you utlise
Using SQLConnection
'' do your stuff here
End Using
I think this then forces the freeing of resources after it exits
Call "USE SomeOtherDB" (e.g Master) to close your own connection, or one of
ALTER DATABASE SET SINGLE_USER
or
ALTER DATABASE SET SINGLE_USER WITH ROLLBACK_IMMEDIATE
to close other connections. The first waits for connections to conclude, the second is immediate.
"Call "USE SomeOtherDB" (e.g Master) to close your own connection, or one of"
//on master ... CREATE
using (var cnn = new SqlConnection(MASTER))
{
cnn.Open();
var createDbCmd = new SqlCommand(string.Format("create database [{0}]", db), cnn).ExecuteNonQuery();
cnn.Close();
}
using (var cnn = new SqlConnection(tempDB))
{
cnn.Open();
var createTbl = new SqlCommand(string.Format("create table t (t int )"), cnn).ExecuteNonQuery();
var dropTbl = new SqlCommand(string.Format("drop table t"), cnn).ExecuteNonQuery();
//Do additional stuf
var userMaster = new SqlCommand(string.Format("use master"), cnn).ExecuteNonQuery();
cnn.Close();
}
//on master ... CREATE
using (var cnn = new SqlConnection(MASTER))
{
cnn.Open();
var dropDbCmd = new SqlCommand(string.Format("drop database [{0}]", db), cnn).ExecuteNonQuery();
cnn.Close();
}