Mengakses Data XML
Ada dua metode terpisah untuk mengambil data XML dari sumber data: satu menggunakan CStreamRowset dan yang lain menggunakan CXMLAccessor.
Fungsi | CStreamRowset | CXMLAccessor |
---|---|---|
Jumlah data yang ditransfer | Mengambil data dari semua kolom dan baris sekaligus. | Mengambil data dari semua kolom tetapi hanya satu baris pada satu waktu. Anda harus menavigasi baris menggunakan metode seperti MoveNext . |
Memformat string | SQL Server memformat string XML dan mengirimkannya ke konsumen. | Mengambil data himpunan baris dalam format aslinya (permintaan yang dikirim penyedia sebagai string Unicode) lalu membangun string yang menyimpan data dalam format XML. |
Kontrol atas pemformatan | Anda memiliki beberapa tingkat kontrol atas bagaimana string XML diformat dengan mengatur beberapa properti khusus SQL Server 2000. | Anda tidak memiliki kontrol atas format string XML yang dihasilkan. |
Meskipun CStreamRowset
menyediakan cara yang lebih efisien secara keseluruhan untuk mengambil data dalam format XML, itu hanya didukung oleh SQL Server 2000.
Mengambil data XML menggunakan CStreamRowset
Anda menentukan CStreamRowset sebagai jenis set baris dalam deklarasi atau CTable
AndaCCommand
. Anda dapat menggunakannya dengan aksesor Anda sendiri atau tanpa aksesor, misalnya:
CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;
-atau-
CCommand<CNoAccessor, CStreamRowset> myCmd;
Biasanya ketika Anda memanggil CCommand::Open
(menentukan, misalnya, CRowset
sebagai TRowset
kelas), ia mendapatkan pointer IRowset
. ICommand::Execute
mengembalikan pointer IRowset
, yang disimpan dalam m_spRowset
anggota CRowset
objek. Metode seperti MoveFirst
, MoveNext
, dan GetData
gunakan penunjuk tersebut untuk mengambil data.
Sebaliknya, saat Anda memanggil CCommand::Open
(tetapi menentukan CStreamRowset
sebagai TRowset
kelas), ICommand::Execute
mengembalikan ISequentialStream
pointer, yang disimpan dalam m_spStream
anggota data CStreamRowset. Anda kemudian menggunakan Read
metode untuk mengambil data (untai Unicode) dalam format XML. Contohnya:
myCmd.m_spStream->Read()
SQL Server 2000 melakukan pemformatan XML dan mengembalikan semua kolom dan semua baris kumpulan baris sebagai satu string XML.
Untuk contoh menggunakan metode ini Read
, lihat Menambahkan Dukungan XML ke Konsumen dalam Menerapkan Konsumen Sederhana.
Catatan
Dukungan XML menggunakan CStreamRowset
hanya berfungsi dengan SQL Server 2000 dan mengharuskan Anda memiliki Penyedia OLE DB untuk SQL Server 2000 (diinstal dengan MDAC).
Mengambil Data XML Menggunakan CXMLAccessor
CXMLAccessor memungkinkan Anda mengakses data dari sumber data sebagai data string ketika Anda tidak memiliki pengetahuan tentang skema penyimpanan data. CXMLAccessor
berfungsi seperti CDynamicStringAccessorW
kecuali bahwa yang pertama mengonversi semua data yang diakses dari penyimpanan data sebagai data berformat XML (ditandai). Nama tag XML cocok dengan nama kolom penyimpanan data sedekat mungkin.
Gunakan CXMLAccessor
seperti yang Anda lakukan pada kelas aksesor lainnya, meneruskannya sebagai parameter templat ke CCommand
atau CTable
:
CTable<CXMLAccessor, CRowset> rs;
Gunakan GetXMLRowData untuk mengambil data dari tabel satu baris sekaligus, dan navigasikan baris menggunakan metode seperti MoveNext
, misalnya:
// Open data source, session, and rowset
hr = rs.MoveFirst();
while(SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
{
CStringW strRowData;
myCmd.GetXMLRowData(strRowData);
printf_s( "%S\n", strRowData );
hr = rs.MoveNext();
}
Anda dapat menggunakan GetXMLColumnData untuk mengambil informasi kolom (jenis data) sebagai data string berformat XML.