Makale numarası: 190958 - Son Gözden Geçirme: 02 Mart 2005 Çarşamba - Gözden geçirme: 2.4

Örnek: AOTBLOB okuma/yazma OLE DB Tüketici şablonu kullanarak bulunan BLOB SAYıSı

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

AOTBLOB örnek okuma ve ATL OLE DB Müşteri şablon sınıfları kullanılarak uzun ikili veri (BLOB) alanları yazma gösterir. Örnek yüklemek ve bir bit eşlem dosyasını kaydedin ve yüklenemedi ve bit eşlem görüntüsünü bir veritabanı tablosuna kaydetmek için bir kod içerir.

Örnek de <a0>Microsoft veri bağlantısı</a0> iletişim kutusunu kullanarak bir veri kaynağı seçmek için bir gözatma aynı şekilde bir ODBC bağlantı gösterilmiştir.

Not: Örnek otomatik olarak ekleme ve çıkarma BLOB alanın hedef veri kaynağı üzerinde BLOB1234 adlı bir tablo oluşturur.

Örnek kod, aşağıdaki OLE DB sağlayıcıları ile sınanmıştır:
Microsoft Jet 3.51 OLE DB Provider (Msjtor35.dll 3.52.1527.4)
<a1>Oracle</a1> (msdaora.dll 02.00.3002.15) için Microsoft OLE DB sağlayıcısı
SQL Server (Sqloledb.dll 07.00.0502) için Microsoft OLE DB sağlayıcısı
ODBC sürücüleri (msdasql.dll 02.00.3002.11) için Microsoft OLE DB sağlayıcısı
Örnek, aşağıdaki ODBC sürücüleri için Microsoft OLE DB sağlayıcı erişilen ODBC sürücüleri ile de sınanmıştır:
Microsoft SQL Server ODBC sürücüsü (Sqlsrv32.dll 3.60.0319).
Microsoft ODBC Driver for Oracle'ı (Msora32.dll 2.573.292700).
Microsoft Access sürücüsü (Odbcjt32.dll 3.51.1713)

Daha fazla bilgi

Aşağıdaki dosyalar Microsoft Yükleme Merkezi'nden yüklenebilir:


Aotblob.exe (http://download.microsoft.com/download/vc60ent/sample3/1/win98/en-us/aotblob.exe)

Microsoft destek dosyalarını karşıdan yükleme konusunda ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
119591  (http://support.microsoft.com/kb/119591/EN-US/ ) Microsoft Destek Dosyaları Çevrimiçi Hizmetler'den Nasıl Alınır
Microsoft bu dosyada virüs taraması yapmıştır. Microsoft, dosyanın kullanıma sunulduğu tarihteki en güncel virüs tarama yazılımını kullanmıştır. Dosya, üzerinde herhangi bir yetkisiz değişiklik yapılmasını engellemeye yardım eden geliştirilmiş güvenliğe sahip sunucularda depolanır.

ATL OLE DB müşteri şablonları kullanarak BLOB veri okunuyor

ATL OLE DB Müşteri şablon sihirbazını bir uzun ikili (BLOB) veritabanı alanı okuyan bir tam işlevsel okunur-yalnızca sınıfı oluşturur. Uzun ikili alana yazmak isterseniz, Sihirbazı-üretilen sınıfın değişiklikler yapmanız gerekir.

Sağlayıcı, bir sihirbaz tarafından oluşturulan OLE DB tüketici sınıfta, herhangi bir ISequentialStream işaretçi geçerli satırın BLOB alan üye değişkenlerine otomatik olarak doldurur. BLOB alanından veri okumak için <a0></a0>, daha fazla veri OLE DB sağlayıcı tarafından gönderilene kadar döngü ISequentialStream arabirimi <a1>Okuma</a1> yöntemini çağırın. Çoğu sağlayıcıları, okuduğunuz gibi verileri dinamik olarak tutmak için arabellek oluşturmalısınız; bu nedenle önce verileri okuma verilerin toplam uzunluğu ile sağlamanızı yoksa unutmayın.

ATL OLE DB müşteri şablonları kullanarak BLOB veri yazma

Bir BLOB alanına yazmak için OLE DB sağlayıcı tarafından sağlanan ISequentialStream işaretçiyi bırakın ve, uygulayan ISequentialStream işaretçisi ile değiştirilsin gerekir. Daha fazla baytı yok döndürülen kadar sağlayıcı arabirimi işaretçinizi sonra ISequentialStream::Read çağırır. Bu şekilde, sağlayıcı ve tüketici rolü tersine çevirir. Tüketici ISequentialStream işaretçi sağlar ve sağlayıcı ISequentialStream::Read çağırır. Belirli bir OLE DB sağlayıcıları BLOB verileri yazarken, BLOB alanında kaç bayt olan en fazla ön belirtmek gerektiğini unutmayın. Olabildiğince çok sağlayıcı ile çalışması için <a0></a0>, her durumda sağlayıcısına uzunluğu bilgileri örnek sağlar.

Okuma ve yazma BLOB veri OLE DB ile basitleştirmek için <a0></a0>, CISSHelper adlı bir yardımcı sınıf AOTBLOB örnek vardır. CISSHelper sınıfı, tüm ISequentialStream arabirimini uygular. Sınıf, depolamak ve BLOB veri ayıklamak için kullanılan yerleşik bir arabellek de vardır. Serbest bırakma sayısı sıfır, tipik bir COM arabirimi için benzer düştüğünde CISSHelper kendisini zarar değil olduğunu unutmayın. AddRef ve Release, sağlayıcı arama, ancak bu örnek, nesneyi temizlemeye C++ yıkıcı dayanır ve nesne ayrılmış bir yığını kullanır; böylece bırakılır.

Bir BLOB alana yazma izin vermek için <a0></a0>, ATL OLE DB tüketici Bağlama Sihirbazı tarafından oluşturulan makroyu değiştirmek ve desteği için bir alan uzunluğu ve durum göstergesi olarak aşağıdaki eklemeniz gerekir:
   // Before:

   BEGIN_COLUMN_MAP(...)
   // Various fields..
      BLOB_ENTRY(2, IID_ISequentialStream,STGM_READ, m_BLOBDATA)
   // Various fields...
   END_COLUMN_MAP()

   // After:
   ULONG m_BLOBDATA_LENGTH;
   ULONG m_BLOBDATA_STATUS;

   BEGIN_COLUMN_MAP(...)
   // Various fields...
      BLOB_ENTRY_LENGTH_STATUS(2, IID_ISequentialStream, \ 
                               STGM_READ, m_BLOBDATA, \ 
                m_BLOBDATA_LENGTH, m_BLOBDATA_STATUS)
   // Various fields...
   END_COLUMN_MAP()
				
uzunluğu gösterge için DAMLA yazdığınızda, OLE DB sağlayıcısına BLOB verilerin uzunluğunu sağlamak için gereklidir. BLOB_ENTRY_LENGTH_STATUS makro tanımı AOTBLOB örnek projede bulunan--tüketici ATL OLE DB sınıfları için ATL üstbilgi dosyaları dahil edilmez unutmayın.

Sihirbaz tarafından oluşturulan şablonlar için ek değişiklik yapılmaksızın gereklidir.

Değiştirilmiş bir kullanarak BLOB alanından okunamıyor (uzunluğu ve eklenen durumu) Tüketici şablonu sınıfı, temel bu formülü izleyin:

  1. Değiştirilmiş ATL OLE DB tüketici sınıfınızın açın.
  2. Istediğiniz kayda gider.
  3. BLOB alanı durumunu denetleyin. BLOB alan durum göstergesi için DBSTATUS_S_OK ayarlanmamışsa, boş bir BLOB alan olabilir. Durum alanı için DBSTATUS_S_OK ayarlanmamışsa, sağlayıcı tarafından oluşturulan ISequentialStream işaretçiyi kullanmayın; geçerli bir işaretçi olabilir.
  4. Döngü ve arama parametresi döndürülen bayt okuma kadar bloklar halinde ISequentialStream::Read verilerin tümünü gösterir okuyun. Bloklar halinde döngü içinde gelen verileri işleme veya blokları birleştirerek daha sonra kullanmak için bir büyük bir arabellek.
  5. FreeRecordMemory() tüm alan arabellekleri serbest bırakmak için şablon sınıfını arayın.
  6. Sonraki kayda gider, recordset'i kapatmak ve benzeri.
BLOB alana yazmak için <a0></a0>, genel adımları izleyin:

  1. Değiştirilmiş ATL OLE DB tüketici sınıfınızın açın.
  2. Istediğiniz kayda gider.
  3. BLOB alanı durumunu denetleyin. BLOB alan durum göstergesi için DBSTATUS_S_OK ayarlanmamışsa, boş bir BLOB alan olabilir. DBSTATUS_S_OK durumundaysa, yayın üzerinde IsequentialStream çağırmalısınız, sağlayıcı tarafından verilen bir işaretçi.
  4. Bir CISSHelper BLOB</a1> alanına eklemek istediğiniz verileri sınıf nesnesi. Nesneyi buraya yardımcı olmak için ISequentialStream::Write yöntemini uygular.
  5. Uzunluk göstergesi CISSHelper veri uzunluğunu ayarlamak sınıf nesnesi.
  6. Durum göstergesi DBSTATUS_S_OK için ayarlayın.
  7. BLOB üye alanını (ISequentialStream işaretçisi) CISSHelper nesneye işaret edecek biçimde ayarlayın.
  8. SetData yöntemi, güncelleştirmenin tetiklemek için tüketici sınıfı arayın. Bu noktada sağlayıcı çağrıları ISequentialStream::Read the CISSHelper üzerindeki tüm verileri yüklenemedi sınıfı.
  9. FreeRecordMemory() tüm alan arabellekleri serbest bırakmak için tüketici sınıfını arayın.
  10. Sonraki kayıt, kayıt kümesi'ni kapatın ve bu şekilde taşıyın.
Yalnızca 7 SetData() yerine ınsert() aramak için yukarıdaki adım değiştirmek yerine yeni bir kayıt eklemek varolan bir kayıtla değiştirmek isterseniz, Not.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft OLE DB 2.7, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Anahtar Kelimeler: 
kbmt kbdownload kbconsumer kbdatabase kbdtl kbfile kbhowto KB190958 KbMttr
Otomatik TercümeOtomatik Tercüme
Ö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:190958  (http://support.microsoft.com/kb/190958/en-us/ )