2009-03-24 7 views
0

J'ai écrit une petite application, qui peut restaurer une base de données (C# et SQL2005), mais après avoir accédé à la base de données, je ne peux pas la laisser tomber - elle dit qu'elle est en usage .. faire avec le SQLconnection-pooling, mais puis-je le forcer à relaser la base de données ??Comment forcer SQLconnection à libérer une base de données?

Répondre

1

Spécifiez 'Pooling = False' dans la chaîne de connexion.

0

Si vous utlise

Using SQLConnection 
    '' do your stuff here 
End Using 

Je pense que cela oblige alors la libération des ressources après sa sortie pour fermer votre connexion

0

Appel « UTILISATION SomeOtherDB » (par exemple Master), ou l'un des

ALTER DATABASE SET SINGLE_USER

ou

ALTER DATABASE SET SINGLE_USER WITH ROLLBACK_IMMEDIATE

pour fermer d'autres connexions. Le premier attend que les connexions se terminent, le second est immédiat.

1

Éliminez votre objet SqlConnection.

0

"Appel "USE SomeOtherDB"(maître par exemple) pour fermer votre connexion, ou l'un des"

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

} 
Questions connexes