Ne SqlDataAdapter à proximité de l'occurrence de SqlConnection après Remplissage() la fonction?
Ne SqlDataAdapter
fermer la SqlConnection
après la Fill()
fonction, ou dois-je fermer moi-même?
string cnStr = @"Data Source=TEST;Initial Catalog=Suite;Persist Security Info=True;User ID=app;Password=Immmmmm";
cn = new SqlConnection(cnStr);
SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Date", cn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
cn.Close() //????????
Console.WriteLine(ds.Tables[0].Rows.Count);
Console.WriteLine(cn.State);
OriginalL'auteur Wachburn | 2011-09-12
Vous devez vous connecter pour publier un commentaire.
Dans votre utilisation actuelle, il sera proche de vous:
http://msdn.microsoft.com/en-us/library/zxkb3c3d.aspx
Je pense que c'est toujours mieux de faire explicitement de répondre pour vous-même avec un
using
déclaration:C'est souvent plus lisible et ne pas compter sur les gens de comprendre le fonctionnement interne de
SqlDataAdapter.Fill
, juste leusing
déclaration et les connexions.Toutefois, si vous savoir la connexion est fermée avant que la carte ne l'utilise (comme dans, vous venez de créer la connexion) et il n'est pas utilisé pour autre chose, votre code est parfaitement sûr et valable.
Personnellement, j'aimerais écrire quelque chose comme ceci:
en effet, de consulting et de MSDN vérifie cela. Désolé, je n'ai pas compris la première fois autour.
Il gère sa fermeture pour vous si la commande est exécutée avec succès, mais qu'en est-il un cas d'exception? (blocage, délai d'attente, etc.)
Le
using
déclaration appelle dispose d'exception en tant que bien, tout simplement, il compile dans un try-finally bloc sous le capot.Juste essayé au cas où quelque chose avait changé pour C# 7, mais malheureusement, cela est encore vrai uniquement quand le type est partagé, comme
using (IDisposable conn = new SqlConnection(), comm = new SqlCommand())
vous ne pouvez pas faireusing (SqlConnection conn = new SqlConnection(), SqlCommand comm = new SqlCommand())
donc troisusing
déclarations sont nécessaires dans ce cas.OriginalL'auteur Adam Houldsworth
Comme je sais que vous devez fermer la connexion en vous propre
Meilleure façon de le faire est
cela va vous fermer automatiquement la connexion
à l'aide de bloc en C# est très maniable tout en traitant avec des objets jetables. Jetable objets sont les objets qui peuvent libérer explicitement les ressources qu'ils utilisent lorsqu'il est appelé à en disposer. Comme nous le savons .Net de la collecte des ordures est non-déterministe, donc vous ne pouvez pas prédire quand exactement l'objet sera d'ordures collectées.
Lire ce post pour plus de détails : la compréhension à l'aide de " bloquer en C#
OriginalL'auteur Pranay Rana