Düzeltme: Parametreli komut gelen ADO kullanarak bağlantı sızıntısı

Makale çevirileri Makale çevirileri
Makale numarası: 247757 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Sonuçta, Windows Foundation Classes (WFC) Java ADO ve açma için parametreleştirilmiş bir komut kullanarak bir recordset nesnesi, düzgün biçimde kapatıldı bağlantıları düzgün havuza geri dönüştürülüyor ve kullanırken, bağlantı sızdırılmış. Bu soruna geçici bir çözüm bulmak için <a0></a0>, ADO bağlantısı, Java COM nesnesinde kapattıktan sonra System.GC () arayın. Normal koşullarda, System.GC () bir ADO bağlantısı, bağlantı serbest olarak kapattıktan sonra call gerekmez.

Çözüm

Bu sorun en son hizmet paketleri Windows 2000 ve MDAC 2.5 düzeltildi.
  • Bu sorunu gidermek için, en son Windows 2000 hizmet paketini edinin. Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    260910En son Windows 2000 hizmet paketi nasıl elde edilir
  • Bu sorunu gidermek için <a0></a0>, Microsoft Data Access Components 2.5 için en son hizmet paketini edinin. Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    293312BILGI: son MDAC 2.5 nasıl elde edilir hizmet paketi
Bu düzeltmenin ingilizce sürümünde aşağıdaki dosya öznitelikleri olmalı veya daha yenisi:
File name       Date        Size      Version      
-----------------------------------------------------
Msado15.dll     1/26/2000   329KB     2.12.4926.0
				

Durum

Microsoft, Microsoft Data Access Objects2.1 SP2 ve 2.5 bir sorun olduğunu onaylamıştır. Bu sorun ilk olarak Microsoft Data Access Components 2.5 Service Pack 2 ve Windows 2000 Service Pack 2'de giderilmiştir.

Daha fazla bilgi

Bağlantı/oturum sorunu havuzu, aşağıdaki koşulların tümü geçerli olduğunda oluşur:
  1. Microsoft Data Access Objects 2.1 SP2 yüklüdür.
  2. Parametreli hale getirilmiş bir ADO Command nesnesi kullanılır.
  3. Java COM nesnesi, MTS veya COM + barındırılıyor.
  4. Java COM nesnesinin bağlantısı kesilmiş bir recordset oluşturur.

Davranışı Yeniden Oluşturma Adımları

  1. Visual J ++ aşağıdaki kodu kullanarak 6.0 ile ConnLoss adlı bir Java COM nesnesi proje oluştur:
    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. Java COM nesnesi, MTS veya COM + paketi ekleyin.
  3. Java COM nesnesi ile aşağıdaki Microsoft Visual Basic for Applications (VBA) kodunu arayın:
    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. Windows NT Performans izleyicisi, SQL Server 7.0 bulunduğu makine üzerinde çalıştırmak ve SQL Server: genel istatistikler performans sayacı altında kullanıcı bağlantıları izleyin.
  5. Istemci VBA kodu çalıştırın. Bu noktada, 100 kullanıcı bağlantılarını OLE DB Oturum Kuyruğu düzgün Java COM nesnesi tarafından kullanılan SQL OLE DB sağlayıcısı için çalışmıyor olduğunu gösteren, Windows NT Performans izleyicisi tarafından bildirildiği şekilde kod tarafından oluşturulur.

  6. Ikinci FindAuthorsLastName parametresi true olarak System.GC () kodu etkinleştirmek için değiştirin.
  7. Durdurun ve MTS veya COM + paketi yeniden başlatın.
  8. Istemci VBA kodu için bir kez çalıştırın.
Bu aşamada yalnızca birkaç kullanıcı bağlantılarını OLE DB Oturum Kuyruğu düzgün System.GC () çağrıldığında Java COM nesnesi tarafından kullanılan SQL OLE DB sağlayıcısı için çalıştığını gösteren bir kod tarafından oluşturulur.

Not: Çağrı System.GC (), Java COM nesnesinin performansını büyük ölçüde etkiler, dikkat etmeniz gereken performansı, böylece System.GC () çağrılıyor genel kaçınılmalıdır. Örneğin, iş nesnesi yalnızca her 10 veya 100 yöntem çağrıları azaltmak System.GC ()'ı çağırmak için kodlanmış System.GC () çağırma yöntemi performans etkisi başına. Ayrıca bir parametreli komut nesnesi kullanımını sabit kodlama parametre değerleri bir SQL dizesi ve yukarıdaki örnekte olduğu gibi parametre simgelerini kullanarak kaçınılması; bu da sorunu circumvents.

Özellikler

Makale numarası: 247757 - Last Review: 23 Şubat 2014 Pazar - Gözden geçirme: 3.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Visual J++ 6.0 Standard Edition
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbbug kbfix kbmdac250sp2fix KB247757 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:247757

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