Lorsque vous faites IO travail, j'ai le code pour attendre une exception.
SqlConnection conn = null;
SqlCommand cmd = null;
try
{
conn = new SqlConnection(Settings.Default.qlsdat_extensionsConnectionString)
cmd = new SqlCommand(reportDataSource, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Year", SqlDbType.Char, 4).Value = year;
cmd.Parameters.Add("@startDate", SqlDbType.DateTime).Value = start;
cmd.Parameters.Add("@endDate", SqlDbType.DateTime).Value = end;
conn.Open(); //opens connection
DataSet dset = new DataSet();
new SqlDataAdapter(cmd).Fill(dset);
this.gridDataSource.DataSource = dset.Tables[0];
}
catch(Exception ex)
{
Logger.Log(ex);
throw;
}
finally
{
if(conn != null)
conn.Dispose();
if(cmd != null)
cmd.Dispose();
}
Edit: Pour être explicite, je éviter l' utilisation de bloc ici parce que je crois qu'il est important pour vous connecter dans des situations de ce genre. L'expérience m'a appris que vous ne savez jamais ce genre de bizarre exception peut pop-up. La journalisation de cette situation pourrait vous aider à détecter un blocage, ou de trouver d'où un changement de schéma affecte un peu utilisée et peu testé partie de vous-même base de code, ou un certain nombre d'autres problèmes.
Edit 2: On peut faire valoir que l'utilisation de bloc peut encapsuler un try/catch dans cette situation, et c'est tout à fait valable, et fonctionnellement équivalent. - Ce vraiment se résume à la préférence. Voulez-vous éviter le supplément de nidification au coût de la manipulation de votre propre disposition? Ou avez-vous engager le supplément de nidification d'avoir l'auto-élimination. J'ai l'impression que l'ancien est plus propre de sorte que je le fais de cette façon. Cependant, je ne réécrit pas le dernier, si je le trouve dans la base de code dans lequel je travaille.
Edit 3: j'ai vraiment, vraiment souhaitez MS avait créé de manière plus explicite la version de l'aide() qui fait qu'il est plus intuitif de ce qui se passe réellement et donné plus de flexibilité dans ce cas. Considérer le suivant, imaginaire de code:
SqlConnection conn = null;
SqlCommand cmd = null;
using(conn = new SqlConnection(Settings.Default.qlsdat_extensionsConnectionString),
cmd = new SqlCommand(reportDataSource, conn)
{
conn = new SqlConnection(Settings.Default.qlsdat_extensionsConnectionString);
cmd = new SqlCommand(reportDataSource, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Year", SqlDbType.Char, 4).Value = year;
cmd.Parameters.Add("@startDate", SqlDbType.DateTime).Value = start;
cmd.Parameters.Add("@endDate", SqlDbType.DateTime).Value = end;
cmd.Open();
DataSet dset = new DataSet();
new SqlDataAdapter(cmd).Fill(dset);
this.gridDataSource.DataSource = dset.Tables[0];
}
catch(Exception ex)
{
Logger.Log(ex);
throw;
}
À l'aide d'instruction crée un try/finally avec Dispose() appelle dans le enfin. Pourquoi ne pas donner le développeur d'une méthode unifiée de faire de l'élimination et de manipulation d'exception?