FIX: Perdita di connessione utilizzando il comando con parametri in ADO

Traduzione articoli Traduzione articoli
Identificativo articolo: 247757 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato archiviato. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando si utilizza classi WFC per Java (WFC) e ADO e apertura oggetti di un recordset utilizzando un comando con parametri, le connessioni che vengono chiuse correttamente non correttamente sono in pool e riciclate, conseguente perdita di connessioni. Per aggirare il problema, è necessario chiamare System.gc() dopo aver chiuso la connessione ADO nell'oggetto COM Java. In situazioni normali, non è necessario chiamare System.gc() dopo la chiusura di una connessione ADO per liberare la connessione.

Risoluzione

Questo problema è stato risolto nei service pack più recenti per Windows 2000 e MDAC 2.5.
  • Per risolvere questo problema è necessario ottenere la versione più recente del service pack per Windows 2000. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
    260910Come ottenere Windows 2000 Service Pack più recente
  • Per risolvere il problema, ottenere il service pack più recente per Microsoft Data Access Components 2.5. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
    293312INFORMAZIONI: Come ottenere il più recente MDAC 2.5 Service Pack
La versione inglese di questa correzione deve essere di avere i seguenti attributi di file o versioni successive:
File name       Date        Size      Version      
-----------------------------------------------------
Msado15.dll     1/26/2000   329KB     2.12.4926.0
				

Status

Microsoft ha confermato che questo problema riguarda Microsoft Data Access Objects2.1 SP2 e 2.5. Questo problema è stato innanzitutto corretto in Microsoft Data Access Components 2.5 Service Pack 2 e Microsoft Windows 2000 Service Pack 2.

Informazioni

Questo problema di pool di connessione/sessioni si verifica quando tutti le condizioni seguenti sono presenti:
  1. È installato Microsoft Data Access Objects 2.1 di SP2.
  2. Viene utilizzato un oggetto ADO Command con parametri.
  3. L'oggetto COM Java è ospitato in MTS o COM +.
  4. L'oggetto COM Java crea un recordset disconnesso.

Procedura per riprodurre il problema.

  1. Creare un progetto di oggetto di COM Java denominato ConnLoss con Visual J ++ 6.0 utilizzando il seguente codice:
    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. Aggiungere l'oggetto COM Java MTS o il pacchetto.
  3. Chiamare l'oggetto COM Java con il seguente Microsoft Visual Basic per Applications Edition (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. Eseguire Performance Monitor nel computer in cui si trova SQL Server 7.0 e monitorare le connessioni utente sotto il contatore di Statistiche di SQL Server: generale delle prestazioni.
  5. Eseguire il codice di client VBA. A questo punto, 100 connessioni utente vengono generate mediante il codice man mano che Performance Monitor, che indica che il pool di sessioni OLE DB non funziona correttamente per il provider OLE DB SQL utilizzato dall'oggetto COM Java.

  6. Consente di modificare il secondo parametro di FindAuthorsLastName su true per attivare il codice System.gc().
  7. Arrestare e riavviare il pacchetto MTS o COM +.
  8. Eseguire il codice del client VBA una seconda volta.
A questo punto solo le connessioni utente pochi vengono generate dal codice, che indica che il pool di sessioni OLE DB funzioni correttamente per il provider OLE DB SQL utilizzato dall'oggetto COM Java quando viene chiamato System.gc().

Nota : chiamata System.gc() influisce notevolmente sulle prestazioni dell'oggetto COM Java, pertanto chiamare System.gc() in generale deve essere evitato quando le prestazioni sono un fattore importante. Ad esempio, l'oggetto business potrebbe essere codificata solo chiamare System.gc() chiama ogni metodo di 10 o 100 per ridurre il per impatto sulle prestazioni di metodo di chiamata System.gc(). Inoltre, l'utilizzo di un oggetto di comando con parametri potrebbe essere evitato mediante valori di parametro a livello di codice in una stringa SQL e non utilizza il token del parametro come nell'esempio precedente, questo circumvents nonché il problema.

Proprietà

Identificativo articolo: 247757 - Ultima modifica: domenica 23 febbraio 2014 - Revisione: 3.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Visual J++ 6.0 Standard Edition
Chiavi: 
kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbbug kbfix kbmdac250sp2fix KB247757 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 247757
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

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