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??

Was it helpful?

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();

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top