Aracılığıyla paylaş


OLE DB Uygunluk Testlerini Geçme

Sağlayıcıları daha tutarlı hale getirmek için Data Access SDK bir dizi OLE DB uygunluk testi sağlar. Testler sağlayıcınızı tüm yönleriyle denetler ve beklendiği gibi sağlayıcı işlevlerinize ilişkin makul güvence verir. OLE DB uyumluluk testlerini Microsoft Data Access SDK üzerinde bulabilirsiniz. Bu bölüm uyumluluk testlerini geçmek için yapmanız gereken şeylere odaklanmıştır. OLE DB uyumluluk testlerini yürütme hakkında daha fazla bilgi için bkz. SDK.

Uygunluk Testlerini Çalıştırma

Visual C++ 6.0'da OLE DB sağlayıcı şablonları verileri ve özellikleri kontrol etmenize olanak veren birkaç takma işlevi eklemişti. Bu işlevlerin çoğu, uygunluk testlerine yanıt olarak eklenmiştir.

Not

Sağlayıcınızın OLE DB uygunluk testlerini geçmesi için Birkaç doğrulama işlevi eklemelisiniz.

Bu sağlayıcı iki doğrulama yordamı gerektirir. İlk yordam yani CRowsetImpl::ValidateCommandID satır kümesi sınıfınızın bir parçasıdır. Sağlayıcı şablonları tarafından satır kümesi oluşturulurken çağrılır. Örnek dizinleri desteklemeyeceğini tüketicilere anlatmak için bu yordamı kullanır. İlk çağrı CRowsetImpl::ValidateCommandID öğesinedir (sağlayıcının Yer İşareti için Sağlayıcı Desteği'ndeki CMyProviderRowset için arabirim eşlemesine eklenen _RowsetBaseClass typedef kullandığını böylece bu kadar uzun satırlı şablon değişkenlerini yazmak zorunda kalmadığınızı unutmayınız). Ardından, dizin parametresi NULL değilse (bu durum, tüketicinin bizde bir dizin kullanmak isteyip istemediğini gösterir) DB_E_NOINDEX öğesine dönün. Komut kimlikleri hakkında daha fazla bilgi için OLE DB belirtimine bakıp IOpenRowset::OpenRowset öğesini arayın.

Aşağıdaki kod ValidateCommandID doğrulama yordamıdır:

/////////////////////////////////////////////////////////////////////
// MyProviderRS.H
// Class: CMyProviderRowset 

HRESULT ValidateCommandID(DBID* pTableID, DBID* pIndexID)
{
   HRESULT hr = _RowsetBaseClass::ValidateCommandID(pTableID, pIndexID);
   if (hr != S_OK)
      return hr;

   if (pIndexID != NULL)
      return DB_E_NOINDEX;    // Doesn't support indexes

   return S_OK;
}

DBPROPSET_ROWSET grubunda biri bir özellik değiştirdiğinde sağlayıcı şablonları OnPropertyChanged yöntemini çağırır. Diğer grupların özelliklerini işlemek isterseniz, bunları uygun nesneye ekleyin (yani, DBPROPSET_SESSION denetimleri CMyProviderSession sınıfına gider).

Kod ilk olarak bu özelliğin bir başkasına bağlı olup olmadığını kontrol eder. Özelliğe zincirleme yapılmaktaysa, DBPROP_BOOKMARKS özelliğini True olarak ayarlar. OLE DB belirtimine ilişkin Ek C, özellikler hakkında bilgi içerir. Bu bilgiler ayrıca özelliğin başka bir özelliğe bağlı olup olmadığını size bildirir.

IsValidValue yordamını kodunuza eklemek isteyebilirsiniz. Bir özellik ayarlamaya kalkıştığında şablonlar IsValidValue öğesini çağırır. Özellik değerini ayarlarken ek işleme ihtiyacınız varsa bu yöntemi geçersiz kılarsınız. Her özellik kümesi için bu yöntemlerden birini kullanabilirsiniz.

İş Parçacığı Sorunları

Varsayılan olarak, ATL OLE DB Sağlayıcı Sihirbazı'ndaki OLE DB Sağlayıcı Sihirbazı, sağlayıcının bir grup modelinde çalışması için kod üretir. Bu kodu uyumluluk testleriyle çalıştırmayı denerseniz, başlangıçta hata alırsınız. Bu, OLE DB uygunluk testlerini çalıştırmak için kullanılan araç olan Ltm.exe öğesinin varsayılan olarak boş iş parçacığına ayarlanmasından kaynaklanır. OLE DB Sağlayıcı Sihirbazı kodu, kullanım performansı ve kolaylığı için grup modelini varsayar.

Bu sorunu düzeltmek için LTM'yi veya sağlayıcıyı değiştirebilirsiniz.

LTM'yi grup iş parçacığı modunda çalışacak şekilde değiştirmek için

  1. LTM ana menüsünde Araçlar'ı ve ardından Seçenekler'i tıklatın.

  2. Genel sekmesinde iş parçacığı oluşturma modelini Serbest İş Parçacıklı'dan Bölme İş Parçacıklı'ya değiştirin.

Sağlayıcınızı boş iş parçacığı modunda çalışacak şekilde değiştirmek için:

  • Sağlayıcı projenizdeki tüm CComSingleThreadModel örneklerini arayın ve veri kaynağınızda, oturumda ve satır kümesi üstbilgilerinde bulunması gereken CComMultiThreadModel öğesi ile değiştirin.

  • .rgs dosyanızda iş parçacığı oluşturma modelini Apartment öğesinden Both'a değiştirin.

  • Ağaç iş parçacıklı programlama için doğru programlama kurallarına uyun (yazma kilidi).

Ayrıca bkz.

Kavramlar

Gelişmiş Sağlayıcı Teknikleri