これはよくある質問のように重複を探していました。私が見つけた一番上の答えはthis oneですが、私は与えられた答えが嫌いです。
いつもあなたが完了したらすぐに接続を終了してください。データベースには有限の数の接続があり、多くのリソースが必要です。
近いが発生したことを確認するには、「古い学校」の方法は、try
/catch
/finally
ブロックしていました:
SqlConnection connection;
SqlCommand command;
try
{
// Properly fill in all constructor variables.
connection = new SqlConnection();
command = new SqlCommand();
connection.Open();
command.ExecuteNonQuery();
// Parse the results
}
catch (Exception ex)
{
// Do whatever you need with exception
}
finally
{
if (connection != null)
{
connection.Dispose();
}
if (command != null)
{
command.Dispose();
}
}
しかし、using
文は、それが自動的にオブジェクトを廃棄しますとして好ましい方法です。例外がスローされます場合でも
try
{
using (var connection = new SqlConnection())
using (var command = new SqlCommand())
{
connection.Open();
command.ExecuteNonQuery();
// Do whatever else you need to.
}
}
catch (Exception ex)
{
// Handle any exception.
}
using
文は、それはまだ、コードの実行が停止する前に作成されますオブジェクトを破棄し、その中に特別です。コードを簡潔かつ読みやすくします。
コメントでchristophanoで述べたように、あなたのコードはILまでコンパイルされるとき、それは実際に上記の例で行われているものを複製、try
/finally
ブロックとして書き込まれます。
実際には、「使用しています」というのは非常に最初からあり、2001年のC#1にはすでに存在していました。 –
うわー、それを見てください。私はそれから私の答えを編集します。 – krillgar
良い答え。 usingステートメントは実際にコンパイラによってtry/finallyブロックとして記述されることに言及する価値があります。 – christophano