Você está offline; aguardando reconexão

CORRECÇÃO: Ligação fuga utilizando o comando com parâmetros de ADO

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 247757
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sintomas
Quando utilizar o Windows Foundation Classes para Java (WFC) ADO e abrir um conjunto de registos utilizando o comando com parâmetros objecto, ligações que são fechadas correctamente correctamente não são agrupadas e Reciclagem (Recycled), resultando em transmitido ligações. Para contornar este problema, contacte System.gc() depois de fechar a ligação ADO no objecto COM Java. Em situações normais, não é necessário chamar System.gc() depois de fechar uma ligação ADO para libertar a ligação.
Resolução
Este problema foi corrigido no service packs mais recentes para o Windows 2000 e MDAC 2.5.
  • Para resolver este problema, obtenha o service pack mais recente do Windows 2000. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
    260910Como obter o Service Pack mais recente do Windows 2000
  • Para resolver este problema, obtenha o service pack mais recente do Microsoft Data Access Components 2.5. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
    293312INFO: Como obter o mais recente MDAC 2.5 Service Pack
A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:
File name       Date        Size      Version      -----------------------------------------------------Msado15.dll     1/26/2000   329KB     2.12.4926.0				
Ponto Da Situação
A Microsoft confirmou que este é um problema no Microsoft Data Access Objects2.1 SP2 e 2.5. Este problema foi corrigido pela primeira vez no Microsoft Data Access Components 2.5 Service Pack 2 e Microsoft Windows 2000 Service Pack 2.
Mais Informação
Esta ligação/conjuntos de sessões problema ocorre quando todas as condições seguintes estão presentes:
  1. Microsoft Data Access Objects 2.1 SP2 está instalado.
  2. É utilizado um objecto de comando do ADO com parâmetros.
  3. O objecto COM Java está alojado no MTS ou COM +.
  4. O objecto COM Java cria um conjunto de registos desligado.

Passos para reproduzir o comportamento

  1. Criar um projecto objecto de Java COM nome ConnLoss com Visual 6.0 do J ++ utilizando o seguinte código:
    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. Adicione o objecto COM Java MTS ou o pacote COM +.
  3. Chamar o objecto COM Java com o seguinte Microsoft Visual Basic para código Applications (VBA):
    Sub TestConnLoss()Dim objCL As ObjectDim i As LongDim 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. Execute o Monitor de desempenho do Windows NT no computador onde o SQL Server 7.0 está localizado e monitorizar ligações de utilizador sob o contador de desempenho Estatísticas: gerais do servidor de SQL .
  5. Execute o código VBA do cliente. Nesta altura, 100 ligações do utilizador são geradas pelo código à medida que comunicado pelo Monitor de desempenho do Windows NT, indicando que pooling de sessões de OLE DB não está a funcionar correctamente para o fornecedor SQL OLE DB utilizado pelo objecto Java COM.

  6. Altere o segundo parâmetro do FindAuthorsLastName como true para activar o código de System.gc().
  7. Pare e reinicie o pacote MTS ou COM +.
  8. Execute o código VBA do cliente uma segunda vez.
Neste momento só algumas ligações de utilizadores são geradas pelo código, que indica que o agrupamento de sessão de OLE DB está a funcionar correctamente para o fornecedor SQL OLE DB utilizado pelo objecto COM Java quando System.gc() é chamado.

Nota : chamada System.gc() afecta significativamente o desempenho do objecto COM Java, por isso, chamar System.gc() em geral deve ser evitada quando desempenho é uma consideração. Por exemplo, o objecto de negócio pode ser codificado apenas chamar System.gc() cada método 10 ou 100 chamadas para reduzir a por impacto de desempenho de método de chamar System.gc(). Além disso, a utilização de um objecto de comando com parâmetros pode ser evitada por valores de parâmetro rígido codificação para uma cadeia SQL e não utilizar o parâmetro tokens como no exemplo acima; este circumvents assim o problema.

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 247757 - Última Revisão: 02/23/2014 16:17:11 - Revisão: 3.0

Microsoft Data Access Components 2.1 Service Pack 2, Microsoft Data Access Components 2.5, Microsoft Visual J++ 6.0 Standard Edition

  • kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbbug kbfix kbmdac250sp2fix KB247757 KbMtpt
Comentários