2009-10-08 2 views
0

C#의 Windows 폼에서 MySql 데이터베이스에 대한 쿼리를 실행 한 후 트레드를 닫는 적절한 방법은 무엇입니까?C에서 mysql 데이터베이스에 대한 스레드 닫기 #

이렇게 간단하게 닫을 수 있습니까?

conn.Open(); 

//querycode 

conn.Close(): 
+0

"트레드 닫기"란 무엇을 의미합니까? SQL 호출 후 연결이 닫혀 있는지 확인 하시겠습니까? – Pwninstein

+0

내가 얻는 문제는 내가 "너무 많은 연결"오류가 발생하여 m somtimes 도구를 사용할 때 mysql 데이터베이스가 max_connections 100으로 설정되고 ut.close(); 각 쿼리 후 db 연결을 닫지 않는 것 같습니다. 그것은 SW를 재시작하기 전에 MySql을 놓지 않습니다. – Darkmage

답변

3

봅니다 사용 : 일반적으로 는 IDisposable 인터페이스를 구현하면 나중에 정리해야 리소스를 사용

using(MySqlConnection conn = new MySqlConnection(connString)) 
{ 
    conn.Open(); 
} // conn is automatically closed and disposed at the end of the using block 
0

클래스. 즉, 리소스를 확보하는 데 사용할 수있는 Dispose()라는 함수를 제공합니다.

일회용 객체의 경우

, 당신은 사용 문을 사용할 수 있습니다 : 클래스가 제대로 코딩 된 경우

using (SomeDisposableClass c = new SomeDisposableClass()) { 

    // ... your code here 

} // c.Dispose() automatically called here, freeing up resources 

, 그것은 모든 자원을 해제해야 - 그것을 데이터베이스 연결, 열린 파일 핸들 등을 할 수 - Dispose() 함수에서.

이것은 MySQL이 아마도 Dispose()에서 데이터베이스와의 연결을 끊을 수 있으므로 c.Close()를 명시 적으로 호출 할 필요는 없지만 항상 문서를 확인하십시오.

0

당신이 그 일을하는 방법, 당신은이 같은 using 블록으로 연결 개체를 래핑 할 수 괜찮 :

using (var con = new MySqlConnection(/*connection string*/)) 
{ 
    con.Open(); 
    //do stuff 
    // con.Close(); //don't need this it will be closed automatically* 
} 

(* see)

+1

con.Close(); 여기에 중복됩니다. –

+0

내 도구가 내 도구에서 MySql DB를 탐색하는 메신저로 더 많은 밟아 빌드 내 애플 리케이션을 보이기 때문에 그것은 중복되지 않는 것. – Darkmage

0

아니, 질문의 코드가 아닙니다 충분하다. 쿼리가 예외를 throw하면 가비지 컬렉터가이를 알아챌 때까지 기다리지 않아도됩니다().

다른 사람의 그림처럼 객체를 using 블록으로 묶거나 최소한 try/finally 구조로 묶어야합니다.