FIX: ADO In 매개 변수화된 명령을 사용하여 연결 누수

기술 자료 번역 기술 자료 번역
기술 자료: 247757 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

현상

Java (WFC) 및 ADO, 및 여에 대한 매개 변수가 있는 명령을 사용하여 레코드, 제대로 닫혀 있는 연결을 제대로 풀링된 휴지통에 있는 개체 및 Windows 기반 클래스를 사용하는 경우, 결과 연결이 누수될. 이 문제를 해결하려면 System.gc() Java COM 개체에 ADO 연결을 닫은 후 호출해야 합니다. 정상적인 상황에서는 연결을 해제하려고 ADO 연결을 닫은 후 System.gc() 호출할 필요가 없습니다.

해결 방법

이 문제는 Windows 2000 및 MDAC 2.5를 최신 서비스 팩이 해결되었습니다.
  • 이 문제를 해결하려면 Windows 2000용 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
    260910최신 Windows 2000 서비스 팩을 구하는 방법
  • 이 문제를 해결하려면 Microsoft 데이터 액세스 구성 요소 2.5는 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
    293312정보: 최신 MDAC 2.5 구하는 방법 서비스 팩
이 수정의 영어 버전은 다음 파일 특성을 가집니다 또는 나중에:
File name       Date        Size      Version      
-----------------------------------------------------
Msado15.dll     1/26/2000   329KB     2.12.4926.0
				

현재 상태

Microsoft는 Microsoft 데이터 액세스 Objects2.1 SP2 및 2.5 문제가 있음을 확인했습니다. 이 문제는 Microsoft 데이터 액세스 구성 요소 2.5 서비스 팩 2 및 Microsoft Windows 2000 서비스 팩 2에서 수정되었습니다.

추가 정보

이 문제는 풀링 연결/세션 다음 조건이 모두 있을 때 발생합니다.
  1. Microsoft 데이터 액세스 개체 2.1 SP2가 설치되어 있습니다.
  2. 매개 변수화된 ADO 명령 개체가 사용됩니다.
  3. MTS 또는 COM + 에서 Java COM 개체가 호스팅됩니다.
  4. Java COM 개체를 연결이 끊긴된 레코드 집합을 만듭니다.

Windows Mobile 기반 스마트폰에 GPRS 연결이 구성되어 있는지 확인합니다

  1. Visual J ++ 다음 코드를 사용하여 6.0과 ConnLoss 라는 Java COM 개체를 프로젝트 만들기:
    import com.ms.wfc.data.*;
    
    public class ConnLoss
    {
      // Modify this connection string to point to a running SQL Server.
      private static String m_connect = 
        "Provider=SQLOLEDB;Server=(Local);Database=Pubs;UID=sa;PWD=;";
      public com.ms.wfc.data.adodb._Recordset 
        FindAuthorsLastName( String au_id, boolean fCallGC )
      {
        Connection conn = null;
        Command cmd   = null;
        Recordset rs  = null;
        try
        {     
          // Open connection to SQL Server.
          conn = new Connection();
          conn.setCursorLocation( AdoEnums.CursorLocation.CLIENT );
          conn.open( m_connect );
          
          // Prepare command object.
          cmd = new Command();
          cmd.setActiveConnection( conn );
          
          cmd.setCommandText( "select au_lname from authors where au_id=?" );
        
          cmd.getParameters().append( 
            cmd.createParameter( "au_id", 
                       AdoEnums.DataType.VARCHAR,
                       AdoEnums.ParameterDirection.INPUT,
                       20, au_id ) );
          
          // Execute command.
          rs = cmd.execute();
          
          // Disconnect recordset and close connection.
          rs.setActiveConnection( (Connection) null );
          conn.close();
          
          // Call gc if requested.
          if (fCallGC) System.gc();
          
          // Return disconnected recordset.
          return (com.ms.wfc.data.adodb._Recordset) rs.getDataSource();
          
        }
        catch( AdoException adoEX )
        {
          // Log errors here.
        }
        return null;
      }
    }
    					
  2. MTS 또는 COM + 패키지가 Java COM 개체를 추가하십시오.
  3. VBA 코드가 포함된 다음 Microsoft Visual Basic Java COM 개체를 호출하는:
    Sub TestConnLoss()
    Dim objCL As Object
    Dim i As Long
    Dim rs As ADODB.recordset
      set objCL = CreateObject("ConnLoss.ConnLoss")
      For i = 1 To 100
        Set rs = objCL.FindAuthorsLastName("756-30-7391", False)
        Debug.Print rs.Fields("au_lname").Value
        rs.Close
        Set rs = Nothing    
      Next i    
    End Sub
    					
  4. SQL Server 7.0 위치한 컴퓨터에 Windows NT 성능 모니터를 실행하여 사용자 연결에서 SQL 서버: 일반 통계 성능 카운터를 모니터링하십시오.
  5. VBA 클라이언트 코드를 실행하십시오. 이 시점에서 100 사용자 연결 OLE DB 세션 풀링을 제대로 Java COM 개체가 사용하는 SQL OLE DB 공급자에 대한 작동하지 않는 것을 나타내는 Windows NT 성능 모니터를 통해 보고된 대로 코드에 의해 생성됩니다.

  6. System.gc() 코드를 활성화하려면 FindAuthorsLastName 의 두 번째 매개 변수로 True 로 변경하십시오.
  7. MTS 또는 COM + 패키지 중지했다가 다시 시작하십시오.
  8. VBA 클라이언트 코드를 한 번 실행하십시오.
이 시점에서 몇 가지 사용자 연결 System.gc() 호출될 때 Java COM 개체에 의해 사용되는 SQL OLE DB 공급자에 대한 OLE DB 세션 풀링을 제대로 작동하고 있는지 나타내는 코드에 의해 생성됩니다.

참고: 호출 System.gc() Java COM 개체의 성능을 크게 영향을, 성능을 고려할 때 따라서 System.gc() 호출 일반적으로 피해야 합니다. 예를 들어, 비즈니스 개체 System.gc() 줄이기 위해 모든 10 또는 100 메서드를 호출하는 경우에만 호출할 수 코딩할 수 있는 당 System.gc() 호출하는 메서드는 성능 영향. 또한 매개 변수가 있는 명령 개체 사용하여 하드 코딩하는 매개 변수 값을 SQL 문자열 및 위의 예제와 같이 매개 변수 토큰을 사용하여 피할 수 있습니다; 이는 물론 문제가 우회하는.

속성

기술 자료: 247757 - 마지막 검토: 2014년 2월 23일 일요일 - 수정: 3.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Data Access Components 2.1 서비스 팩 2
  • Microsoft Data Access Components 2.5
  • Microsoft Visual J++ 6.0 Standard Edition
키워드:?
kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbbug kbfix kbmdac250sp2fix KB247757 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com