J'ai été conseillé de mettre tout un Dans cette application, il est beaucoup plus important d'assurer les connexions à la base de données Commencez à accumuler en raison d'exceptions. p> p> en utilisant le bloc code> à l'intérieur d'un
essayer code>, sinon le
à l'aide de code> d'étendue empêchera l'exception d'être pris. Cependant, cela n'empêcherait-il pas le
en utilisant code> de disposer correctement ses ressources si une exception a été lancée? Si j'ai le code ci-dessous, où dois-je mettre le
essayer code> blocks?
3 Réponses :
Il n'est pas nécessaire de mettre Ceci est MSDN à l'aide d'un échantillon à propos d'essayer de prendre et d'utiliser: p> est égal à: p> essayer code>
attrape code> car
en utilisant code> implicitement, il utilise en fait essayer enfin et sûr qu'il dispose des objets .
Nitpick - en utilisant code> implémente essayer / enfin, pas essayer / attraper
Faux, il ne mettra pas à mettre en œuvre des captures. Mais seulement essayer et enfin!
@zenwalker J'ai écrit qu'il l'applique implicitement (je veux dire ce que l'OP veut d'essayer d'essayer) aussi j'ai dit que l'utilisation de le faire avec essayer enfin.
Quand j'ai commenté, le reste de vos lignes n'était pas là. Maintenant, vous l'avez corrigé!
@zenwalker Oui, je l'ai écrit d'abord après que je vois qu'il a une ambiguïté et le modifier.
L'instruction code> à l'aide de code> empêchera déjà l'accumulation d'accumulation - il fait le côté nettoyage des choses pour vous, en étant efficacement un AS une mise à part, ce n'est pas clair pourquoi vous effacez les paramètres de la commande lorsque la commande est sur le point d'être disposée de toute façon ... Je vous encourage-vous à déclarer les variables dans le essayer code> /
enfin code > Bloc avec un appel à
Dispose code> dans le bloc
enfin code>. Si vous aussi em> veux un
essayer code> /
attrape code> bloc, vous pouvez le mettre à l'intérieur ou à l'extérieur - mais êtes-vous sûr qu'il ne devrait pas être à un niveau supérieur? Comment vous attendez-vous réellement manipulez em> l'exception?
en utilisant des déclarations code> également, de sorte que vous n'ayez pas fini de lire d'eux en dehors du bloc: P>
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(strPreparedStatement, connection))
{
if (sqlParameters != null)
{
// If sqlParameter is an array, you can just use
// command.Parameters.AddRange(sqlParameters) instead
foreach (SqlParameter parameter in sqlParameters)
{
command.Parameters.Add(parameter);
}
}
using (SqlDataReader reader = command.ExecuteReader())
{
DataTable table = new DataTable();
// Perform any extra initialization here
table.Load(reader);
return table;
}
}
}
Intéressant. Tous les très bons points. J'apprécie le point sur sqldatreader code>. J'ai totalement manqué ça.
Vous devez envelopper le lecteur de données dans une instruction à l'aide d'une instruction, car il s'agit d'une ressource jetable: J'ai également rendu la connexion, la commande et les objets de lecteur de données sont définis localement dans cette bloquer la portée. p> en ce qui concerne un Essayez / enfin code> indiquez que vous n'en avez plus besoin que le
à l'aide des instructions code> Assurez-vous que la méthode Dispose sera invoqué même en cas d'exception. Et cette méthode pour les connexions et les commandes SQL garantit de les libérer correctement. P> p>
Bon point. J'avais manqué que jusqu'à ce que les réponses ici indiquaient cela. Je préfère également utiliser le combiné en utilisant des blocs code>. Je ne sais pas pourquoi je ne pensais pas que je pourrais l'utiliser ici.