Verbindung zur SqlServer DB trennen und DB löschen

03/07/2008 - 11:32 von andi rickenbach | Report spam
Hallo,

ich habe mit c# eine Applikation geschrieben welche eine Restore-Funktion
enthàlt. Das Restore funktioniert folgendermassen:
1. Temporàre DB erstellen
2. Restore auf Temporàre DB
3. Version aus einer Tabelle T_Version lesen
4. Version mit Applikation vergleichen ob Restore erlaubt
5. Temporàre DB löschen
6. Restore auf richtige DB

Ich habe nun das Problem das ich bei Punkt 5 die Temporàre DB nicht mehr
löschen kann, sobald ich mal eine Connection darauf hatte. Connection war
notwendig um aus T_Version zu lesen. sqlConn.Close() sowie sqlConn.Dispose()
wurde nach dem Zugriff ausgeführt aber ich kann die Temporàre DB trotzdem
nicht löschen.

Löschen versuche ich so:
Microsoft.SqlServer.Management.Smo.Server srv = new
Microsoft.SqlServer.Management.Smo.Server(new
Microsoft.SqlServer.Management.Common.ServerConnection(sqlRestoreConn));

//Drop temp database if exists
if (srv.Databases.Contains(strDBName) == true)
{
srv.Databases[strDBName].Drop();
}

Die Verbindung zuvor machte ich so:
string strConnectionTemp = String.Format(@"server={0};" +
@"password={1};database={2};" + @"User ID={3};Pooling=true;integrated
security=false;persist security info=False;Connect
Timeout={4}",strLocalMachine + "\\" + strServer, strPassword,
STR_TEMP_DATABASE_NAME, strUser, 30);

Kann mir da jemand helfen? Was muss ich tun damit wirklich diese Verbindung
wieder zerstört wird? Ich habe es mit SqlConnection.ClearAllPools();
versucht, das funktioniert, aber ich habe noch andere Verbindungen zu anderen
DB's offen, welche nicht zerstört werden dürfen. Ich muss also nur diese eine
DBConnection zur TemporàrenDB wieder zerstören um diese zu löschen.

Vielen Dank.
 

Lesen sie die antworten

#1 Helmut Woess
03/07/2008 - 13:56 | Warnen spam
Am Thu, 3 Jul 2008 02:32:03 -0700 schrieb andi rickenbach:
...
Kann mir da jemand helfen? Was muss ich tun damit wirklich diese Verbindung
wieder zerstört wird? Ich habe es mit SqlConnection.ClearAllPools();
versucht, das funktioniert, aber ich habe noch andere Verbindungen zu anderen
DB's offen, welche nicht zerstört werden dürfen. Ich muss also nur diese eine
DBConnection zur TemporàrenDB wieder zerstören um diese zu löschen.



Meine Idee wàre:
Anmelden an der master-Datenbank (nicht an der zu löschenden, sonst kann
man sie ja nicht löschen, eh klar, oder?) und sich dann die connection zu
dieser DB suchen und killen. Eine Beschreibung dazu gibt es hier:
http://msdn.microsoft.com/de-de/lib...73730.aspx

hoffe, du kannst was damit anfangen,
Helmut

Ähnliche fragen