2011-08-31 2 views
1

예외 오류를 반환 유지합니다. 연결의 현재 상태가 연결 중입니다.ExecuteScalar는 내가 구성 '사용'하지만 난 루프에서 빠른 속도로 이미지를로드 할 때, 나는 다음과 같은 오류를 사용하고

이상한 부분은 루프를 실행할 때마다 루프의 다른 시간에 발생한다는 것입니다.

내 전체 솔루션을 검색하고 (열고 아무 전화도 없다) 또는 어디서나) (닫기하지만 다음에 : 다음

public myMethod() 
    { 
     string conString; 
     conString = "Server=(local);Database=myDB;Uid=appaccess;Pwd=xxxxxx"; 
     con = new SqlConnection(conString); 
     con.Open(); 
    } 

    public void Dispose() 
    { 
     con.Close(); 
    } 

그리고 나중에 내 코드에서 나는의 루프에서이 메소드를 호출 imgID :

public byte[] GetImageBitStream(int imgID) 
    { 
     SqlCommand cmd = new SqlCommand("GetImageBitStream", con); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add(new SqlParameter("@imgID", imgID)); 
     Object picData = new Object(); 
     picData = cmd.ExecuteScalar(); 
     if (picData == null) 
     { 
      picData = ""; 
     } 
     return (byte[])picData; 
    } 

다음에 어떤 것을 시도해야할지 모르겠다. 이 코드는 작동하는 데 사용 되다가 최근에 '사용'형식으로 전환했을 때 작동을 멈췄습니다. 그러나 다시 전환하더라도 오류가 발생합니다.

+1

이 귀하의 질문에 대답하지 않지만, 당신이 정말로 열고 SqlCommand를 사용 주위 SQL 연결을 닫으려면. 그러면 연결 풀에서 연결을 가져오고 사용할 때마다 연결을 다시 설정하여 클러스터 된 SQL Server (부분적으로)에 대해 작업 할 수 있으며 dispose를 구현하지 않아도됩니다. 참조 : http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx, 이것이 '사용'모델로 전환했다는 것을 의미하지 않는 한. –

답변

1

나에게 연결 유출음 같은 소리가납니다. 다음과 같은 라인을 따라

시도 리팩토링 :

string conString; 
conString = "Server=(local);Database=myDB;Uid=appaccess;Pwd=xxxxxx"; 
using (var con = new SqlConnection(conString)) 
{ 
    con.Open(); 
    foreach (int id in imgIdCollection) 
    { 
     var img = GetImageBitStream(id,con) 
    } 
} 
+0

나는 SqlConnection을 정적으로 선언했다. 개인 또는 공개로 더 잘 작동합니다. :) –

+0

네. 필드가 연결 누수의 공통 소스이기 때문에 실제로 연결을 유지하면 안됩니다. 연결 풀이 다 떨어지기 전에 가비지 컬렉터를 정리해야합니다. 여전히 using (var x = new sqlconnection()) {패턴} 패턴을 따르는 것이 좋습니다. – Twisted

관련 문제