Hallo,
ich habe ein Windows-Programm (C#, .NET Ver. 3.5) entwickelt, welches für die verwendete DB eine backup und restore Funktionalität anbieten soll. Das lässt sich ja leider alles nur durch batch-Scripte, welche vom Programm aus gestartet werden, erledigen. Aber was solls!? Backup funktioniert ja auch, nur leider das restore nicht. Problem dabei ist, das das Programm selbst irgendwie eine Verbindung zur DB offen hält und ich vor dem restore nicht die Datenbank und das Schema löschen kann! Es kommt also immer die Fehlermeldung: “database xyz is being accessed by other users”.
Was ich dabei nicht verstehe ist, das ich alle von mir benötigten Verbindungen immer beende! So sehen etwas verallgemeinert meine Zugriffe aus:
public NpgsqlConnection openConnection()
{
NpgsqlConnection dbConnection = null;
try
{
dbConnection = new NpgsqlConnection(DBConnectionStr);
dbConnection.Open();
return dbConnection;
}
catch (NpgsqlException exc)
{
throw exc;
}
}
public void closeConnection(NpgsqlConnection dbConnection)
{
if (dbConnection != null)
{
if (dbConnection.State == ConnectionState.Open)
dbConnection.Close();
dbConnection.Dispose();
}
}
public void Execute(string query)
{
NpgsqlConnection dbConn = null;
try
{
// Verbindung zur DB herstellen
dbConn = openConnection();
// irgendwas machen
NpgsqlCommand cmd = new NpgsqlCommand(query, dbConn);
cmd.ExecuteNonQuery();
cmd.Dispose();
}
catch (NpgsqlException exc)
{
throw exc;
}
finally
{
closeConnection(dbConn);
}
}
Es wäre schön, wenn jemand ne gute Idee hätte und mir helfen könnte!
Gruß
Marc