J'ai essayé de fermer une connexion dans le destructeur de ma classe, pour être sûr que si j'oublie de le fermer - il se ferme automatiquement, et il déclenche une exception.fermer la connexion dans le destructeur
J'ai cherché un peu et j'ai fondé here que cela ne peut être fait.
Maintenant, j'ai essayé de le fermer deux fois - et ça marche !!! Mais je me demande si c'est une bonne solution. qu'en pensez-vous?
est ici le code
public class MyCommand : IDisposable
{
public readonly DbCommand command;
public MyCommand(string ConnectionString, DbProviderFactory factory)
{
var tempConnexion = factory.CreateConnection();
tempConnexion.ConnectionString = ConnectionString;
tempConnexion.Open();
var t = tempConnexion.BeginTransaction(IsolationLevel.ReadCommitted);
command = tempConnexion.CreateCommand();
command.Connection = tempConnexion;
command.Transaction = t;
}
public MyCommand(string ConnectionString, DbProviderFactory factory, string requete)
: this(ConnectionString, factory)
{
command.CommandText = requete;
}
public MyCommand(string ConnectionString, string provider)
: this(ConnectionString, DbProviderFactories.GetFactory(provider)) { }
public MyCommand(string ConnectionString, string provider, string requete)
: this(ConnectionString, DbProviderFactories.GetFactory(provider), requete) { }
public static implicit operator DbCommand(myCommand c)
{
return c.command;
}
public void Dispose()
{
try
{
var t = command.Transaction;
if (t != null)
{
t.Commit();
t.Dispose();
}
}
catch { }
try
{
if (command.Connection != null)
command.Connection.Dispose();
command.Dispose();
}
catch { }
}
~MyCommand()
{
if (command != null && command.Connection != null && command.Connection.State == ConnectionState.Open)
for (int i = 0; i < 2; i++)//twice to get the handle - it's working!
Dispose();
}
}
Ils me disaient toujours de ne pas utiliser '' Dispose' dans un destructor' – kevintjuh93
utilisez "Using" ......... il va gérer tout – andy
Il suffit d'implémenter l'interface 'IDiposable' pour supprimer les ressources. Voir http://stackoverflow.com/questions/456213/destructor-vs-idisposable –