Ich habe eine SQL-Klasse, die eine Verbindung zur DB herstellt und eine DataTable retreives. Mir ist bewusst, dass die SqlConnection nach dem Beenden entsorgt werden muss. Ich weiß, dass dies mit einem using
Block getan werden kann, aber ist es auch akzeptabel, den Dispose()
Aufruf innerhalb des Destruktors dieser Klasse zu setzen?SQL-Verbindung wird freigegeben
Herre ist mein Code:
public class SQLEng
{
//Connection String Property
//Must be set to establish a connection to the database
public string ConnectionString{ get; set; }
SqlConnection _Conn;
//Overridden Constructor enforcing the Connection string to be set when created
public SQLEng(string connectionString)
{
ConnectionString = connectionString;
_Conn = new SqlConnection(connectionString);
}
//ensure the SqlConnection is disposed when destructing this object
public ~SQLEng()
{
_Conn.Dispose();
}
//various other methods to get datatables etc...
}
Grundsätzlich möchte ich eine Klassenvariable SqlConnection haben, anstatt das SqlConnection innerhalb jeder Methode zu instanziiert, die die DB zugreift. Ist das eine gute Übung?
Es wird nicht garantiert, dass der Destruktor aufgerufen wird. Sie sollten wahrscheinlich 'SQLEng' selbst verfügbar machen und von Benutzern von _it_ abhängen, um die Entsorgung zu handhaben. –
Danke @ m.babcock, ich denke, ich werde Yucks Rat befolgen und die Verbindung nur öffnen und schließen, wenn es erforderlich ist. Ich würde lieber nicht Dispose() jedes Mal aufrufen müssen, wenn ich DB-Zugriff in anderen Klassen brauche - einfach versuchen, es in dieser Klasse einzupacken. – Simon