SQL 연결이 삭제되기 전에 닫아야 합니까()해야 합니까?
일회용 개체에 대한 다른 질문에 따르면, 사용 블록이 끝나기 전에 닫기()를 호출해야 합니까?
using (SqlConnection connection = new SqlConnection())
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "INSERT INTO YourMom (Amount) VALUES (1)";
command.CommandType = System.Data.CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
// Is this call necessary?
connection.Close();
}
사용 중인 블록이 있으므로 SQL 명령의 Dispose 메서드가 호출되고 연결이 닫힙니다.
// System.Data.SqlClient.SqlConnection.Dispose disassemble
protected override void Dispose(bool disposing)
{
if (disposing)
{
this._userConnectionOptions = null;
this._poolGroup = null;
this.Close();
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}
에서 SqlConnection을 분해합니다.NET 리플렉터:
protected override void Dispose(bool disposing)
{
if (disposing)
{
this._userConnectionOptions = null;
this._poolGroup = null;
this.Close();
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}
Dispose() 내부에서 Close()를 호출합니다.
키워드를 사용하면 연결이 올바르게 닫히기 때문에 닫기에 대한 추가 호출이 필요하지 않습니다.
"연결이 풀로 돌아갈 수 있도록 사용이 끝나면 항상 연결을 닫는 것이 좋습니다.Connection 개체의 Close(닫기) 또는 Dispose(폐기) 메서드를 사용하거나 C#의 사용 문 안에서 모든 연결을 열어 이 작업을 수행할 수 있습니다."
SqlConnection의 실제 구현.를 사용하여 폐기합니다.NET Reflector는 다음과 같습니다.
// System.Data.SqlClient.SqlConnection.Dispose disassemble
protected override void Dispose(bool disposing)
{
if (disposing)
{
this._userConnectionOptions = null;
this._poolGroup = null;
this.Close();
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}
Reflector를 사용하면 다음을 확인할 수 있습니다.Dispose
의 방법SqlConnection
실제로 방문합니다.Close()
;
protected override void Dispose(bool disposing)
{
if (disposing)
{
this._userConnectionOptions = null;
this._poolGroup = null;
this.Close();
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}
아니요, SqlConnection에서 Dispose()를 호출하면 Close()도 호출됩니다.
아니요, Using block calls가 있습니다.Dispose()
어쨌든 당신을 위해, 그래서 전화할 필요가 없습니다.Close()
.
아니요, 삭제를 호출하기 전에 연결을 닫을 필요가 없습니다.
SQL Connections와 같은 일부 개체는 Close(닫기)를 호출한 후 다시 사용할 수 있지만 Dispose(폐기)를 호출한 후에는 재사용할 수 없습니다.다른 개체의 경우 Close를 호출하는 것은 Dispose를 호출하는 것과 같습니다. (ManualResetEvent 및 Streams는 이와 같이 작동합니다.)
아니요. SqlConnection 클래스는 ID Disposable에서 상속되며, 연결 개체에 대한 사용이 종료되면 자동으로 Dispose on the SqlConnection 클래스를 호출합니다.
언급URL : https://stackoverflow.com/questions/1195829/do-i-have-to-close-a-sqlconnection-before-it-gets-disposed
'source' 카테고리의 다른 글
collid 6에 대해 bcp 클라이언트로부터 잘못된 열 길이를 수신했습니다. (0) | 2023.05.14 |
---|---|
mongodb에서 컬렉션당 둘 이상의 스키마 사용 (0) | 2023.05.09 |
SQL LIKE 절에서 SqlParameter 사용이 작동하지 않음 (0) | 2023.05.09 |
이클립스에서 기존 프로젝트를 여는 방법 (0) | 2023.05.09 |
이클립스 안드로이드 플러그인 -- libncurses.so .5 (0) | 2023.05.09 |