C#에서 "using"블록으로 익숙해 지려고 노력하고 있지만 사용해야하는 시점을 이해하는 데 어려움이 있습니다.저장 프로 시저에 블록 사용
여기에 예가 나와 있습니다. using
블록없이
내 원래의 코드
:SqlConnection conn = new SqlConnection(cCon.getConn());
SqlCommand cmd = new SqlCommand("sp_SaveSomething", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@x", xxx));
cmd.Parameters.Add(new SqlParameter("@ORG", ORG));
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{ }
finally
{
conn.Close();
}
하지만 난 정말이 일을해야 하는가? 아니면 (SqlConnection conn = new SqlConnection(cCon.getConn()))
을 사용해야합니까? 이걸 이해하게 도와주세요. 내가 원래 그렇게 잘못하고있는거야?
SqlConnection conn = new SqlConnection(cCon.getConn());
using(SqlCommand cmd = new SqlCommand("sp_SaveSomething", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@x", xxx));
cmd.Parameters.Add(new SqlParameter("@ORG", ORG));
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{ }
finally
{
conn.Close();
}
}
이 기사를 읽어야합니다. 그것은 아주 잘 설명합니다; http://msdn.microsoft.com/en-GB/library/yh598w02.aspx. 특히, "using"문이 컴파일러에 실제로 반영된 것을 보여주는 코드 스 니펫을 살펴보십시오. –
try/catch/finally는 iDisposable을 사용하여 객체 내부에서 수행되므로이 상황에서 try/catch/finally를 수행 할 필요가 없습니다. catch/finally를 필요로하는 다른 논리가 있다면 다른 용도로도 사용할 수 있습니다. 그러나이 경우에 당신이하는 일은 기본적으로 처분이 당신을 위해 무엇을 할 것인지를 모방하는 것입니다. 예외적으로 두 번째 코드 예제에서 문제의 오류를 삼키는 것입니다. =) –