REVISIÓN: Pérdida de conexión mediante el comando parametrizado en ADO

Seleccione idioma Seleccione idioma
Id. de artículo: 247757 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando se utiliza Windows Foundation Classes para Java (WFC) ADO y abrir un conjunto de registros mediante un comando parametrizado objeto, las conexiones que están cerradas correctamente se agrupadas y reciclar correctamente, lo que pérdidas conexiones. Para evitar este problema, llame System.GC () después de cerrar la conexión de ADO en su objeto COM de Java. En circunstancias normales, no es necesario llamar a System.GC () después de cerrar una conexión ADO para liberar la conexión.

Solución

Este problema se corrigió en los service Pack más recientes para Windows 2000 y MDAC 2.5.
  • Para resolver este problema, obtenga el Service Pack más reciente de Windows 2000. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    260910Cómo obtener el Service Pack más reciente para Windows 2000
  • Para resolver este problema, obtenga el service pack más reciente para Microsoft Data Access Components 2.5. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    293312INFO: Cómo obtener la más reciente de MDAC 2.5 Service Pack
La versión en inglés de esta revisión debe tener los atributos de archivo siguientes o posteriores:
File name       Date        Size      Version      
-----------------------------------------------------
Msado15.dll     1/26/2000   329KB     2.12.4926.0
				

Estado

Microsoft ha confirmado que este es un problema de Microsoft Data Access Objects2.1 SP2 y 2.5. Este problema se corrigió por primera vez en Microsoft Data Access Components 2.5 Service Pack 2 y Microsoft Windows 2000 Service Pack 2.

Más información

Esta sesión o conexión agrupación problema se produce cuando están presentes todas las condiciones siguientes:
  1. Microsoft Data Access Objects 2.1 SP2 está instalado.
  2. Se utiliza un objeto Command de ADO parametrizado.
  3. El objeto COM de Java está alojado en MTS o COM +.
  4. El objeto de Java COM crea un conjunto de registros desconectado.

Pasos para reproducir el comportamiento

  1. Cree un proyecto de objeto de Java COM llamado ConnLoss con Visual J ++ 6.0 con el siguiente 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. Agregue el objeto COM de Java a MTS o el paquete.
  3. Llamar al objeto COM de Java con el siguiente de Microsoft Visual Basic para aplicaciones (VBA):
    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. Ejecute a Monitor de rendimiento de Windows NT en el equipo donde se encuentra el SQL Server 7.0 y supervisar conexiones de usuario en el contador de rendimiento Estadísticas de SQL Server: general .
  5. Ejecute el código de cliente VBA. En este momento, 100 conexiones de usuario generan el código notificado por el Monitor de rendimiento de Windows NT, que indica que la agrupación de sesiones OLE DB no funciona correctamente para el proveedor OLE DB de SQL utilizado el objeto COM de Java.

  6. Cambiar el segundo parámetro de FindAuthorsLastName en true para activar el código System.GC ().
  7. Detenga y reinicie el paquete MTS o COM +.
  8. Ejecutar el código cliente una segunda vez.
En este momento sólo unas pocas conexiones de usuario son generadas por el código, que indica que la agrupación de sesiones OLE DB funciona correctamente para el proveedor OLE DB de SQL utilizado el objeto COM de Java cuando se llama a System.GC ().

Nota : llamada A System.GC () afectará enormemente al rendimiento del objeto COM de Java, por lo tanto, una llamada a System.GC () en general debe evitarse cuando rendimiento es una consideración. Por ejemplo, el objeto comercial podría codificarse para llamar sólo a System.GC () llama cada método de 10 ó 100 para reducir la por el impacto de rendimiento de método de llamada a System.GC (). Además, podría evitarse el uso de un objeto de comando parametrizado por valores de parámetro modificable en una cadena SQL y no utiliza el parámetro símbolos como en el ejemplo anterior; Esto evita el problema así.

Propiedades

Id. de artículo: 247757 - Última revisión: domingo, 23 de febrero de 2014 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Visual J++ 6.0 Edición estándar
Palabras clave: 
kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbbug kbfix kbmdac250sp2fix KB247757 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 247757

Enviar comentarios

 

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