Ich habe eine sqlConnection Managerklasse wie folgt:Verwenden Sie die 'using'-Anweisung von C# mit der Funktion eines benutzerdefinierten Objekts, muss IDisposable implementiert werden?
public class SQLConn {
public string connStr = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
private SqlConnection sqlConn;
public SqlConnection Connection()
{
sqlConn = new SqlConnection(connStr);
return sqlConn;
}
public void Open()
{
sqlConn .Open();
}
}
Wenn ich eine Funktion mit der Aussage wie ‚mit‘:
var conn = new SQLConn();
using (conn.Connection())
{
String query = "Select * from table";
objSql = new SqlCommand(query, conn.Connection());
conn.Open();
DoSomething();
}
Ist die Anweisung using dispose der Verbindung automatisch, da conn.Connection()
zurückkehren ein SqlConnection-Objekt? Oder muss ich IDisposable und eine benutzerdefinierte Dispose-Methode für die SqlConn-Klasse implementieren?
Ist das überhaupt ein guter Weg? Ich arbeite mit Legacy-Code und kann noch kein ORM verwenden, aber gibt es eine Möglichkeit, dieses bestehende Muster zum Verwalten/Erstellen von SQL-Verbindungen zu vereinfachen?
Die letzte Art des Ausdrucks * * IDisposable implementieren muss: Fehler ‚Bar‘: In einer using-Anweisung verwendet wird, muss ‚System.IDisposable implizit konvertierbar sein –
Hmmm, interessant ist, dass veränderte Verhalten von vorherige Versionen des Compilers, oder habe ich es einfach nur vermisst, verstanden? – leppie
Ich bin mir einer Änderung nicht bewusst (aber ich habe in letzter Zeit nicht die 1.2 Spezifikation angeschaut). Denken Sie vielleicht an 'foreach'? wo könnte der Enumerator * wegwerfbar sein (und wenn ja, ist entsorgt), muss es aber nicht sein? Oder vielleicht die Tatsache, dass der zurückgegebene Wert Null sein darf? –