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 |