Bagikan melalui


Kelas CDynamicAccessor

Memungkinkan Anda mengakses sumber data saat Anda tidak memiliki pengetahuan tentang skema database (struktur dasar database).

Sintaks

class CDynamicAccessor : public CAccessorBase

Persyaratan

Header: atldbcli.h

Anggota

Metode

Nama Deskripsi
TambahkanBindEntry Menambahkan entri ikatan ke kolom output saat menimpa aksesor default.
CDynamicAccessor Membuat instans CDynamicAccessor dan menginisialisasi objek.
Tutup Membatalkan ikatan semua kolom, merilis memori yang dialokasikan, dan merilis penunjuk antarmuka IAccessor di kelas .
GetBlobHandling Mengambil nilai penanganan BLOB untuk baris saat ini.
GetBlobSizeLimit Mengambil ukuran BLOB maksimum dalam byte.
GetBookmark Mengambil marka buku untuk baris saat ini.
GetColumnCount Mengambil jumlah kolom dalam set baris.
GetColumnFlags Mengambil karakteristik kolom.
GetColumnInfo Mengambil metadata kolom.
GetColumnName Mengambil nama kolom tertentu.
GetColumnType Mengambil tipe data kolom tertentu.
GetLength Mengambil panjang maksimum kolom dalam byte.
GetOrdinal Mengambil indeks kolom yang diberi nama kolom.
GetStatus Mengambil status kolom tertentu.
GetValue Mengambil data dari buffer.
SetBlobHandling Mengatur nilai penanganan BLOB untuk baris saat ini.
SetBlobSizeLimit Mengatur ukuran BLOB maksimum dalam byte.
SetLength Mengatur panjang kolom dalam byte.
SetStatus Mengatur status kolom tertentu.
SetValue Menyimpan data ke buffer.

Keterangan

Gunakan CDynamicAccessor metode untuk mendapatkan informasi kolom seperti nama kolom, jumlah kolom, jenis data, dan sebagainya. Anda kemudian menggunakan informasi kolom ini untuk membuat aksesor secara dinamis pada waktu proses.

Informasi kolom disimpan dalam buffer yang dibuat dan dikelola oleh kelas ini. Dapatkan data dari buffer menggunakan GetValue.

Untuk diskusi dan contoh penggunaan kelas pengakses dinamis, lihat Menggunakan Aksesor Dinamis.

CDynamicAccessor::AddBindEntry

Menambahkan entri ikatan ke kolom output.

Sintaks

HRESULT AddBindEntry(const DBCOLUMNINFO& info) throw();

Parameter

info
[di] Struktur DBCOLUMNINFO yang berisi informasi kolom. Lihat "Struktur DBCOLUMNINFO" di IColumnsInfo::GetColumnInfo dalam Referensi Programmer OLE DB.

Tampilkan Nilai

Salah satu nilai HRESULT standar.

Keterangan

Gunakan metode ini saat mengganti aksesor default yang dibuat dengan CDynamicAccessor (lihat Bagaimana Cara Mengambil Data?).

CDynamicAccessor::CDynamicAccessor

Membuat instans CDynamicAccessor dan menginisialisasi objek.

Sintaks

CDynamicAccessor(DBBLOBHANDLINGENUM eBlobHandling = DBBLOBHANDLING_DEFAULT,
   DBLENGTH nBlobSize = 8000);

Parameter

eBlobHandling
Menentukan bagaimana data objek besar biner (BLOB) akan ditangani. Nilai defaultnya adalah DBBLOBHANDLING_DEFAULT. Lihat SetBlobHandling untuk deskripsi nilai DBBLOBHANDLINGENUM.

nBlobSize
Ukuran BLOB maksimum dalam byte; data kolom atas nilai ini diperlakukan sebagai BLOB. Nilai defaultnya adalah 8.000. Lihat SetBlobSizeLimit untuk detailnya.

Keterangan

Jika Anda menggunakan konstruktor untuk menginisialisasi CDynamicAccessor objek, Anda dapat menentukan bagaimana objek akan mengikat BLOB. BLOB dapat berisi data biner seperti grafik, suara, atau kode yang dikompilasi. Perilaku defaultnya adalah memperlakukan kolom lebih dari 8.000 byte sebagai BLOB dan mencoba mengikatnya ke ISequentialStream objek. Namun, Anda dapat menentukan nilai yang berbeda untuk menjadi ukuran BLOB.

Anda juga dapat menentukan cara CDynamicAccessor menangani data kolom yang memenuhi syarat sebagai data BLOB: data BLOB dapat menangani data BLOB secara default; dapat melewati (tidak mengikat) data BLOB; atau dapat mengikat data BLOB dalam memori yang dialokasikan penyedia.

CDynamicAccessor::Close

Membatalkan ikatan semua kolom, merilis memori yang dialokasikan, dan merilis penunjuk antarmuka IAccessor di kelas .

Sintaks

void Close() throw();

CDynamicAccessor::GetBlobHandling

Mengambil nilai penanganan BLOB untuk baris saat ini.

Sintaks

const DBBLOBHANDLINGENUM GetBlobHandling() const;

Keterangan

Mengembalikan nilai penanganan BLOB eBlobHandling seperti yang ditetapkan oleh SetBlobHandling.

CDynamicAccessor::GetBlobSizeLimit

Mengambil ukuran BLOB maksimum dalam byte.

Sintaks

const DBLENGTH GetBlobSizeLimit() const;

Keterangan

Mengembalikan nilai penanganan BLOB nBlobSize sebagaimana ditetapkan oleh SetBlobSizeLimit.

CDynamicAccessor::GetBookmark

Mengambil marka buku untuk baris saat ini.

Sintaks

HRESULT GetBookmark(CBookmark< >* pBookmark) const throw();

Parameter

pBookmark
[out] Penunjuk ke objek CBookmark .

Tampilkan Nilai

Salah satu nilai HRESULT standar.

Keterangan

Anda perlu mengatur DBPROP_IRowsetLocate ke VARIANT_TRUE untuk mengambil bookmark.

CDynamicAccessor::GetColumnCount

Mengambil jumlah kolom.

Sintaks

DBORDINAL GetColumnCount() const throw();

Tampilkan Nilai

Jumlah kolom yang diambil.

CDynamicAccessor::GetColumnFlags

Mengambil karakteristik kolom.

Sintaks

bool GetColumnFlags(DBORDINAL nColumn,
   DBCOLUMNFLAGS* pFlags) const throw();

Parameter

nColumn
[di] Nomor kolom. Nomor kolom dimulai dengan 1. Nilai 0 mengacu pada kolom bookmark, jika ada.

pFlags
[out] Penunjuk ke bitmask yang menjelaskan karakteristik kolom. Lihat "DBCOLUMNFLAGS Enumerated Type" di IColumnsInfo::GetColumnInfo dalam Referensi Programmer OLE DB.

Tampilkan Nilai

Mengembalikan true jika karakteristik kolom berhasil diambil. Jika tidak, ia kembali false.

Keterangan

Nomor kolom diimbangi dari satu. Kolom nol adalah kasus khusus; itu adalah marka buku jika tersedia.

CDynamicAccessor::GetColumnInfo

Mengembalikan metadata kolom yang diperlukan oleh sebagian besar konsumen.

Sintaks

HRESULT GetColumnInfo(IRowset* pRowset,
   DBORDINAL* pColumns,
   DBCOLUMNINFO** ppColumnInfo,
   OLECHAR** ppStringsBuffer) throw();

Parameter

pRowset
[di] Penunjuk ke antarmuka IRowset .

pColumns
[out] Pointer ke memori untuk mengembalikan jumlah kolom dalam set baris; angka ini mencakup kolom marka buku, jika ada.

ppColumnInfo
[out] Pointer ke memori untuk mengembalikan array DBCOLUMNINFO struktur. Lihat "Struktur DBCOLUMNINFO" di IColumnsInfo::GetColumnInfo dalam Referensi Programmer OLE DB.

ppStringsBuffer
[out] Pointer ke memori untuk mengembalikan pointer ke penyimpanan untuk semua nilai string (nama yang digunakan baik dalam columnid atau untuk pwszName) dalam satu blok alokasi.

Tampilkan Nilai

Salah satu nilai HRESULT standar.

Keterangan

Lihat IColumnsInfo::GetColumnInfo di Referensi Programmer OLE DB untuk informasi tentang jenis DBORDINALdata , DBCOLUMNINFO, dan OLECHAR.

CDynamicAccessor::GetColumnName

Mengambil nama kolom yang ditentukan.

Sintaks

LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();

Parameter

nColumn
[di] Nomor kolom. Nomor kolom dimulai dengan 1. Nilai 0 mengacu pada kolom bookmark, jika ada.

Tampilkan Nilai

Nama kolom yang ditentukan.

CDynamicAccessor::GetColumnType

Mengambil tipe data kolom tertentu.

Sintaks

bool GetColumnType(DBORDINAL nColumn,
   DBTYPE* pType) const throw();

Parameter

nColumn
[di] Nomor kolom. Nomor kolom dimulai dengan 1. Nilai 0 mengacu pada kolom bookmark, jika ada.

pType
[out] Penunjuk ke jenis data kolom yang ditentukan.

Tampilkan Nilai

Mengembalikan true keberhasilan atau false kegagalan.

CDynamicAccessor::GetLength

Mengambil panjang kolom yang ditentukan.

Sintaks

bool GetLength(DBORDINAL nColumn,
   DBLENGTH* pLength) const throw();

bool GetLength(const CHAR* pColumnName,
   DBLENGTH* pLength) const throw();

bool GetLength(const WCHAR* pColumnName,
   DBLENGTH* pLength) const throw();

Parameter

nColumn
[di] Nomor kolom. Nomor kolom dimulai dengan 1. Nilai 0 mengacu pada kolom bookmark, jika ada.

pColumnName
[di] Penunjuk ke string karakter yang berisi nama kolom.

pLength
[out] Penunjuk ke bilangan bulat yang berisi panjang kolom dalam byte.

Tampilkan Nilai

Mengembalikan true jika kolom yang ditentukan ditemukan. Jika tidak, fungsi ini mengembalikan false.

Keterangan

Penimpaan pertama mengambil nomor kolom, dan penimpaan kedua dan ketiga mengambil nama kolom dalam format ANSI atau Unicode.

CDynamicAccessor::GetOrdinal

Mengambil nomor kolom yang diberi nama kolom.

Sintaks

bool GetOrdinal(const CHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

bool GetOrdinal(const WCHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

Parameter

pColumnName
[di] Penunjuk ke string karakter yang berisi nama kolom.

pOrdinal
[out] Penunjuk ke nomor kolom.

Tampilkan Nilai

Mengembalikan true jika kolom dengan nama yang ditentukan ditemukan. Jika tidak, fungsi ini mengembalikan false.

CDynamicAccessor::GetStatus

Mengambil status kolom yang ditentukan.

Sintaks

bool GetStatus(DBORDINAL nColumn,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const CHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const WCHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

Parameter

nColumn
[di] Nomor kolom. Nomor kolom dimulai dengan 1. Nilai 0 mengacu pada kolom bookmark, jika ada.

pColumnName
[di] Penunjuk ke string karakter yang berisi nama kolom.

pStatus
[out] Penunjuk ke variabel yang berisi status kolom. Lihat DBSTATUS di Referensi Programmer OLE DB untuk informasi selengkapnya.

Tampilkan Nilai

Mengembalikan true jika kolom yang ditentukan ditemukan. Jika tidak, fungsi ini mengembalikan false.

CDynamicAccessor::GetValue

Mengambil data untuk kolom tertentu.

Sintaks

void* GetValue(DBORDINAL nColumn) const throw();

void* GetValue(const CHAR* pColumnName) const throw();

void* GetValue(const WCHAR* pColumnName) const throw();

template < class ctype >
bool GetValue(DBORDINAL nColumn, ctype* pData) const throw();

template < class ctype >
bool GetValue(const CHAR* pColumnName, ctype* pData) const throw();

template < class ctype >
bool GetValue(const WCHAR* pColumnName, ctype* pData) const throw();

Parameter

ctype
[di] Parameter templat yang menangani jenis data apa pun kecuali jenis string (CHAR*, WCHAR*), yang memerlukan penanganan khusus. GetValue menggunakan jenis data yang sesuai berdasarkan apa yang Anda tentukan di sini.

nColumn
[di] Nomor kolom. Nomor kolom dimulai dengan 1. Nilai 0 mengacu pada kolom bookmark, jika ada.

pColumnName
[di] Nama kolom.

pData
[out] Penunjuk ke konten kolom yang ditentukan.

Tampilkan Nilai

Jika Anda ingin meneruskan data string, gunakan versi nontemplated dari GetValue. Versi yang tidak diintemplasi dari metode ini mengembalikan void*, yang menunjuk ke bagian buffer yang berisi data kolom yang ditentukan. Mengembalikan NULL jika kolom tidak ditemukan.

Untuk semua jenis data lainnya, lebih mudah untuk menggunakan versi templat .GetValue Versi templat kembali true pada keberhasilan atau false kegagalan.

Keterangan

Gunakan versi yang tidak diintemplasi untuk mengembalikan kolom yang berisi string dan versi templat untuk kolom yang berisi jenis data lainnya.

Dalam mode debug, Anda akan mendapatkan pernyataan jika ukuran pData tidak sama dengan ukuran kolom yang ditunjukkannya.

CDynamicAccessor::SetBlobHandling

Mengatur nilai penanganan BLOB untuk baris saat ini.

Sintaks

bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);

Parameter

eBlobHandling
Menentukan bagaimana data BLOB akan ditangani. Ini bisa mengambil nilai berikut:

  • DBBLOBHANDLING_DEFAULT: Menangani data kolom yang lebih besar dari nBlobSize (sebagaimana diatur oleh SetBlobSizeLimit) sebagai data BLOB dan mengambilnya melalui objek ISequentialStream atau IStream . Opsi ini akan mencoba mengikat setiap kolom yang berisi data yang lebih besar dari nBlobSize atau terdaftar sebagai DBTYPE_IUNKNOWN sebagai data BLOB.

  • DBBLOBHANDLING_NOSTREAMS: Menangani data kolom yang lebih besar dari nBlobSize (sebagaimana diatur oleh SetBlobSizeLimit) sebagai data BLOB dan mengambilnya melalui referensi dalam memori milik konsumen yang dialokasikan penyedia. Opsi ini berguna untuk tabel yang memiliki lebih dari satu kolom BLOB, dan penyedia hanya mendukung satu ISequentialStream objek per aksesor.

  • DBBLOBHANDLING_SKIP: Lewati (jangan ikat) kolom yang memenuhi syarat karena berisi BLOB (aksesor tidak akan mengikat atau mengambil nilai kolom tetapi masih akan mengambil status dan panjang kolom).

Keterangan

Anda harus menelepon SetBlobHandling sebelum memanggil Open.

Metode konstruktor CDynamicAccessor mengatur nilai penanganan BLOB ke DBBLOBHANDLING_DEFAULT.

CDynamicAccessor::SetBlobSizeLimit

Mengatur ukuran BLOB maksimum dalam byte.

Sintaks

void SetBlobSizeLimit(DBLENGTH nBlobSize);

Parameter

nBlobSize
Menentukan batas ukuran BLOB.

Keterangan

Mengatur ukuran BLOB maksimum dalam byte; data kolom yang lebih besar dari nilai ini diperlakukan sebagai BLOB. Beberapa penyedia memberikan ukuran yang sangat besar untuk kolom (seperti 2 GB). Daripada mencoba mengalokasikan memori untuk kolom ukuran ini, Anda biasanya akan mencoba mengikat kolom ini sebagai BLOB. Dengan cara itu Anda tidak perlu mengalokasikan semua memori, tetapi Anda masih dapat membaca semua data tanpa takut pemotongan. Namun, ada beberapa kasus di mana Anda mungkin ingin memaksa CDynamicAccessor untuk mengikat kolom besar dalam jenis data aslinya. Untuk melakukan ini, panggil SetBlobSizeLimit sebelum memanggil Open.

Metode konstruktor CDynamicAccessor mengatur ukuran BLOB maksimum ke nilai default 8.000 byte.

CDynamicAccessor::SetLength

Mengatur panjang kolom yang ditentukan.

Sintaks

bool SetLength(DBORDINAL nColumn,
   DBLENGTH nLength)throw();

bool SetLength(const CHAR* pColumnName,
   DBLENGTH nLength) throw();

bool SetLength(const WCHAR* pColumnName,
   DBLENGTH nLength) throw();

Parameter

nColumn
[di] Nomor kolom. Nomor kolom dimulai dengan 1. Nilai 0 mengacu pada kolom bookmark, jika ada.

nLength
[di] Panjang kolom dalam byte.

pColumnName
[di] Penunjuk ke string karakter yang berisi nama kolom.

Tampilkan Nilai

Mengembalikan true jika panjang kolom yang ditentukan berhasil diatur. Jika tidak, fungsi ini mengembalikan false.

CDynamicAccessor::SetStatus

Mengatur status kolom yang ditentukan.

Sintaks

bool SetStatus(DBORDINAL nColumn,
   DBSTATUS status)throw();

bool SetStatus(const CHAR* pColumnName,
   DBSTATUS status) throw();

bool SetStatus(const WCHAR* pColumnName,
   DBSTATUS status) throw();

Parameter

nColumn
[di] Nomor kolom. Nomor kolom dimulai dengan 1. Nilai 0 mengacu pada kolom bookmark, jika ada.

status
[di] Status kolom. Lihat DBSTATUS di Referensi Programmer OLE DB untuk informasi selengkapnya.

pColumnName
[di] Penunjuk ke string karakter yang berisi nama kolom.

Tampilkan Nilai

Mengembalikan true jika status kolom yang ditentukan berhasil diatur. Jika tidak, fungsi ini mengembalikan false.

CDynamicAccessor::SetValue

Menyimpan data ke kolom tertentu.

Sintaks

template <class ctype>
bool SetValue(
   DBORDINAL nColumn,
   constctype& data) throw( );

template <class ctype>
bool SetValue(
   const CHAR * pColumnName,
   const ctype& data) throw( );

template <class ctype>
bool SetValue(
   const WCHAR *pColumnName,
   const ctype& data) throw( );

Parameter

ctype
[di] Parameter templat yang menangani jenis data apa pun kecuali jenis string (CHAR*, WCHAR*), yang memerlukan penanganan khusus. GetValue menggunakan jenis data yang sesuai berdasarkan apa yang Anda tentukan di sini.

pColumnName
[di] Penunjuk ke string karakter yang berisi nama kolom.

data
[di] Penunjuk ke memori yang berisi data.

nColumn
[di] Nomor kolom. Nomor kolom dimulai dengan 1. Nilai 0 mengacu pada kolom bookmark, jika ada.

Tampilkan Nilai

Jika Anda ingin mengatur data string, gunakan versi yang tidak diintemplasi dari GetValue. Versi yang tidak diintemplasi dari metode ini mengembalikan void*, yang menunjuk ke bagian buffer yang berisi data kolom yang ditentukan. Mengembalikan NULL jika kolom tidak ditemukan.

Untuk semua jenis data lainnya, lebih mudah untuk menggunakan versi templat .GetValue Versi templat kembali true pada keberhasilan atau false kegagalan.

Lihat juga

Templat Konsumen OLE DB
Referensi Templat Konsumen OLE DB
Kelas CAccessor
Kelas CDynamicParameterAccessor
Kelas CManualAccessor