Bagikan melalui


Menggunakan Jenis Data XML di Klien Asli SQL Server

Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Penting

SQL Server Native Client (SNAC) tidak dikirim dengan:

  • SQL Server 2022 (16.x) dan versi yang lebih baru
  • SQL Server Management Studio 19 dan versi yang lebih baru

SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru.

Untuk proyek baru, gunakan salah satu driver berikut:

Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.

SQL Server 2005 (9.x) memperkenalkan jenis data xml yang memungkinkan Anda menyimpan dokumen XML dan fragmen dalam database SQL Server. Jenis data xml adalah jenis data bawaan di SQL Server, dan dalam beberapa cara mirip dengan jenis bawaan lainnya, seperti int dan varchar. Seperti jenis bawaan lainnya, Anda dapat menggunakan jenis data xml sebagai jenis kolom saat membuat tabel; sebagai jenis variabel, jenis parameter, atau jenis pengembalian fungsi; atau dalam fungsi CAST dan CONVERT.

Pertimbangan Pemrograman

XML dapat menjelaskan sendiri karena dapat secara opsional menyertakan header XML yang menentukan pengodean dokumen, misalnya:

<?xml version="1.0" encoding="windows-1252"?><doc/>

Standar XML menjelaskan bagaimana prosesor XML dapat mendeteksi pengodean yang digunakan untuk dokumen dengan memeriksa beberapa byte pertama dokumen. Ada peluang untuk pengodean yang ditentukan oleh aplikasi untuk bertentangan dengan pengodean yang ditentukan oleh dokumen. Untuk dokumen yang diteruskan sebagai parameter terikat, XML diperlakukan sebagai data biner oleh SQL Server, sehingga tidak ada konversi yang dibuat dan pengurai XML dapat menggunakan pengodean yang ditentukan dalam dokumen tanpa masalah. Namun, untuk data XML yang terikat sebagai WSTR, maka aplikasi harus memastikan bahwa dokumen dikodekan sebagai Unicode. Ini dapat mengharuskan memuat dokumen ke dalam DOM, mengubah pengodean menjadi Unicode dan membuat serial dokumen. Jika ini tidak dilakukan, konversi data dapat terjadi, yang mengakibatkan XML tidak valid atau rusak.

Ada juga potensi konflik ketika XML ditentukan dalam literal. Misalnya berikut ini tidak valid:

INSERT INTO xmltable(xmlcol) VALUES('<?xml version="1.0" encoding="UTF-16"?><doc/>')

INSERT INTO xmltable(xmlcol) VALUES(N'<?xml version="1.0" encoding="UTF-8"?><doc/>')

Penyedia OLE DB Klien Asli SQL Server

DBTYPE_XML adalah jenis data baru khusus untuk XML di penyedia SQL Server Native Client OLE DB. Selain itu, data XML dapat diakses melalui jenis DBTYPE_BYTES, DBTYPE_WSTR, DBTYPE_BSTR, DBTYPE_XML, DBTYPE_STR, DBTYPE_VARIANT, dan DBTYPE_IUNKNOWN OLE DB yang ada. Data yang disimpan dalam kolom jenis XML dapat diambil dari kolom di kumpulan baris penyedia SQL Server Native Client OLE DB dalam format berikut:

  • String teks

  • ISequentialStream

Catatan

Penyedia SQL Server Native Client OLE DB tidak menyertakan pembaca SAX, tetapi ISequentialStream dapat dengan mudah diteruskan ke objek SAX dan DOM di MSXML.

ISequentialStream harus digunakan untuk pengambilan dokumen XML besar. Teknik yang sama yang digunakan untuk jenis nilai besar lainnya juga berlaku untuk XML. Untuk informasi selengkapnya, lihat Menggunakan Jenis Nilai Besar.

Data yang disimpan dalam kolom jenis XML dalam set baris juga dapat diambil, disisipkan, atau diperbarui oleh aplikasi melalui antarmuka yang biasa seperti IRow::GetColumns, IRowChange::SetColumns, dan ICommand::Execute. Demikian pula dengan kasus pengambilan, program aplikasi dapat meneruskan string teks atau ISequentialStream ke penyedia SQL Server Native Client OLE DB.

Catatan

Untuk mengirim data XML dalam format string melalui antarmuka ISequentialStream , Anda harus mendapatkan ISequentialStream dengan menentukan DBTYPE_IUNKNOWN dan mengatur argumen pObject ke null dalam pengikatan.

Ketika data XML yang diambil dipotong karena buffer konsumen terlalu kecil, panjangnya dapat dikembalikan sebagai 0xffffffff, yang berarti panjangnya tidak diketahui. Ini konsisten dengan implementasinya sebagai jenis data yang dialirkan ke klien tanpa mengirim informasi panjang di depan data aktual. Dalam beberapa kasus, panjang aktual dapat dikembalikan ketika penyedia telah menyangga seluruh nilai, seperti IRowset::GetData dan tempat konversi data dilakukan.

Data XML yang dikirim ke SQL Server diperlakukan sebagai data biner oleh server. Ini mencegah konversi apa pun yang terjadi dan memungkinkan pengurai XML mendeteksi pengodean XML secara otomatis. Ini memungkinkan berbagai dokumen XML yang lebih luas (misalnya yang dikodekan dalam UTF-8) diterima sebagai input ke SQL Server.

Jika XML input terikat sebagai DBTYPE_WSTR, aplikasi harus memastikannya sudah dikodekan Unicode untuk menghindari kemungkinan kerusakan oleh konversi data yang tidak diinginkan.

Pengikatan dan Koersi Data

Tabel berikut ini menjelaskan pengikatan dan koersi yang terjadi saat menggunakan jenis data yang tercantum dengan jenis data xml SQL Server.

Jenis Data Ke Server

XML
Ke Server

Non-XML
Dari Server

XML
Dari Server

Non-XML
DBTYPE_XML Melewati 6,7 Kesalahan1 OK11, 6 Kesalahan8
DBTYPE_BYTES Melewati 6,7 N/A2 OK 11, 6 N/A 2
DBTYPE_WSTR Melewati 6,10 N/A 2 OK4, 6, 12 N/A 2
DBTYPE_BSTR Melewati 6,10 N/A 2 OK 3 N/A 2
DBTYPE_STR OK6, 9, 10 N/A 2 OK5, 6, 12 N/A 2
DBTYPE_IUNKNOWN Aliran byte melalui ISequentialStream7 N/A 2 Aliran byte melalui ISequentialStream11 N/A 2
DBTYPE_VARIANT (VT_UI1 | VT_ARRAY) Melewati 6,7 N/A 2 T/A N/A 2
DBTYPE_VARIANT (VT_BSTR) Melewati 6,10 N/A 2 OK3 N/A 2

1Jika jenis server selain DBTYPE_XML ditentukan dengan ICommandWithParameters::SetParameterInfo dan jenis aksesor DBTYPE_XML, kesalahan terjadi ketika pernyataan dijalankan (DB_E_ERRORSOCCURRED, status parameter DBSTATUS_E_BADACCESSOR); jika tidak, data dikirim ke server, tetapi server mengembalikan kesalahan yang menunjukkan bahwa tidak ada konversi implisit dari XML ke jenis data parameter.

2Di luar cakupan topik ini.

3Format adalah UTF-16, tanpa tanda urutan bye (BOM), tidak ada spesifikasi pengodean, tidak ada penghentian null.

4Format adalah UTF-16, tidak ada BOM, tidak ada spesifikasi pengodean, penghentian null.

5Format adalah karakter multibyte yang dikodekan di halaman kode klien dengan terminator null. Konversi dari Unicode yang disediakan server dapat menyebabkan kerusakan data, sehingga pengikatan ini sangat tidak dianjurkan.

6BY_REF dapat digunakan.

7data UTF-16 harus dimulai dengan BOM. Jika tidak, pengodean mungkin tidak dikenali dengan benar oleh server.

8Validasi dapat terjadi pada waktu pembuatan aksesor, atau pada waktu pengambilan. Kesalahannya adalah DB_E_ERRORSOCCURRED, status pengikatan diatur ke DBBINDSTATUS_UNSUPPORTEDCONVERSION.

9Data dikonversi ke Unicode menggunakan halaman kode klien sebelum dikirim ke server. Jika pengodean dokumen tidak cocok dengan halaman kode klien, ini dapat mengakibatkan kerusakan data, sehingga pengikatan ini sangat tidak disarankan.

10BOM selalu ditambahkan ke data yang dikirim ke server. Jika data sudah dimulai dengan BOM, ini menghasilkan dua BOM di awal buffer. Server menggunakan BOM pertama untuk mengenali pengodean sebagai UTF-16 dan kemudian membuangnya. BOM kedua ditafsirkan sebagai karakter spasi nonbreaking lebar nol.

Format 11adalah UTF-16, tidak ada spesifikasi pengodean, BOM ditambahkan ke data yang diterima dari server. Jika string kosong dikembalikan oleh server, BOM masih dikembalikan ke aplikasi. Jika panjang buffer adalah jumlah byte ganjil, data dipotong dengan benar. Jika seluruh nilai dikembalikan dalam gugus, nilai tersebut dapat digabungkan untuk menyusun ulang nilai yang benar.

12Jika panjang buffer kurang dari dua karakter--yaitu, tidak cukup ruang untuk penghentian null--kesalahan luapan dilaporkan.

Catatan

Tidak ada data yang dikembalikan untuk nilai XML NULL.

Standar XML memerlukan XML yang dikodekan UTF-16 untuk memulai dengan tanda urutan byte (BOM), kode karakter UTF-16 0xFEFF. Saat bekerja dengan pengikatan WSTR dan BSTR, SQL Server Native Client tidak memerlukan atau menambahkan BOM karena pengodean tersirat oleh pengikatan. Saat bekerja dengan pengikatan BYTES, XML, atau IUNKNOWN, niatnya adalah untuk memberikan kesederhanaan dalam menangani prosesor XML dan sistem penyimpanan lainnya. Dalam hal ini BOM harus ada dengan XML yang dikodekan UTF-16, dan aplikasi tidak perlu khawatir dengan pengodean aktual, karena sebagian besar prosesor XML (termasuk SQL Server) menyimpulkan pengodean dengan memeriksa beberapa byte pertama dari nilai. Data XML yang diterima dari Klien Asli SQL Server menggunakan pengikatan BYTES, XML, atau IUNKNOWN selalu dikodekan dalam UTF-16 dengan BOM dan tanpa deklarasi pengodean yang disematkan.

Konversi data yang disediakan oleh layanan inti OLE DB (IDataConvert) tidak berlaku untuk DBTYPE_XML.

Validasi dilakukan ketika data dikirim ke server. Validasi sisi klien dan perubahan pengodean harus ditangani oleh aplikasi Anda, dan sangat disarankan agar Anda tidak memproses data XML secara langsung, tetapi harus menggunakan pembaca DOM atau SAX untuk memprosesnya.

DBTYPE_NULL dan DBTYPE_EMPTY dapat terikat untuk parameter input tetapi tidak untuk parameter atau hasil output. Saat terikat untuk parameter input, status harus diatur ke DBSTATUS_S_ISNULL atau DBSTATUS_S_DEFAULT.

DBTYPE_XML dapat dikonversi ke DBTYPE_EMPTY dan DBTYPE_NULL, DBTYPE_EMPTY dapat dikonversi ke DBTYPE_XML, tetapi DBTYPE_NULL tidak dapat dikonversi ke DBTYPE_XML. Ini konsisten dengan DBTYPE_WSTR.

DBTYPE_IUNKNOWN adalah pengikatan yang didukung (seperti yang ditunjukkan pada tabel di atas), tetapi tidak ada konversi antara DBTYPE_XML dan DBTYPE_IUNKNOWN. DBTYPE_IUNKNOWN mungkin tidak digunakan dengan DBTYPE_BYREF.

Penambahan dan Perubahan Set Baris OLE DB

Klien Asli SQL Server menambahkan nilai atau perubahan baru ke banyak kumpulan baris skema OLE DB inti.

Kumpulan Baris Skema KOLOM dan PROCEDURE_PARAMETERS

Penambahan ke KOLOM dan kumpulan baris skema PROCEDURE_PARAMETERS menyertakan kolom berikut.

Nama kolom Tipe Deskripsi
SS_XML_SCHEMACOLLECTION_CATALOGNAME DBTYPE_WSTR Nama katalog tempat koleksi skema XML ditentukan. NULL untuk kolom non-XML atau kolom XML yang tidak di ketik.
SS_XML_SCHEMACOLLECTION_SCHEMANAME DBTYPE_WSTR Nama skema tempat koleksi skema XML ditentukan. NULL untuk kolom non-XML atau kolom XML yang tidak di ketik.
SS_XML_SCHEMACOLLECTIONNAME DBTYPE_WSTR Nama koleksi skema XML. NULL untuk kolom non-XML atau kolom XML yang tidak di ketik.

Kumpulan Baris Skema PROVIDER_TYPES

Dalam kumpulan baris skema PROVIDER_TYPES, nilai COLUMN_SIZE adalah 0 untuk jenis data xml , dan DATA_TYPE DBTYPE_XML.

Kumpulan Baris Skema SS_XMLSCHEMA

Kumpulan baris skema baru SS_XMLSCHEMA diperkenalkan bagi klien untuk mengambil informasi skema XML. Kumpulan baris SS_XMLSCHEMA berisi kolom berikut.

Nama kolom Tipe Deskripsi
SCHEMACOLLECTION_CATALOGNAME DBTYPE_WSTR Katalog yang dimiliki koleksi XML.
SCHEMACOLLECTION_SCHEMANAME DBTYPE_WSTR Skema yang dimiliki koleksi XML.
SCHEMACOLLECTIONNAME DBTYPE_WSTR Nama kumpulan skema XML untuk kolom XML yang diketik, sebaliknya NULL.
TARGETNAMESPACEURI DBTYPE_WSTR Ruang nama target skema XML.
SCHEMACONTENT DBTYPE_WSTR Konten skema XML.

Setiap skema XML dilingkup oleh nama katalog, nama skema, nama koleksi skema, dan ruang nama target Pengidentifikasi Sumber Daya Seragam (URI). Selain itu, GUID baru dengan nama DBSCHEMA_XML_COLLECTIONS juga ditentukan. Jumlah pembatasan dan kolom terbatas untuk kumpulan baris skema SS_XMLSCHEMA didefinisikan sebagai berikut.

GUID Jumlah pembatasan Kolom terbatas
DBSCHEMA_XML_COLLECTIONS 4 SCHEMACOLLECTION_CATALOGNAME

SCHEMACOLLECTION_SCHEMANAME

SCHEMACOLLECTIONNAME

TARGETNAMESPACEURI

Penambahan dan Perubahan Kumpulan Properti OLE DB

SQL Server Native Client menambahkan nilai atau perubahan baru ke banyak kumpulan properti OLE DB inti.

Kumpulan Properti DBPROPSET_SQLSERVERPARAMETER

Untuk mendukung jenis data xml melalui OLE DB, SQL Server Native Client mengimplementasikan kumpulan properti DBPROPSET_SQLSERVERPARAMETER baru, yang berisi nilai berikut.

Nama Tipe Deskripsi
SSPROP_PARAM_XML_SCHEMACOLLECTION_CATALOGNAME DBTYPE_WSTR Nama katalog (database) tempat kumpulan skema XML ditentukan. Bagian dari pengidentifikasi nama tiga bagian SQL.
SSPROP_PARAM_XML_SCHEMACOLLECTION_SCHEMANAME DBTYPE_WSTR Nama skema XML dalam koleksi skema. Bagian dari pengidentifikasi nama tiga bagian SQL.
SSPROP_PARAM_XML_SCHEMACOLLECTIONNAME DBTYPE_WSTR Nama koleksi skema XML dalam katalog Bagian dari pengidentifikasi nama tiga bagian SQL.

Kumpulan Properti DBPROPSET_SQLSERVERCOLUMN

Untuk mendukung pembuatan tabel di antarmuka ITableDefinition , SQL Server Native Client menambahkan tiga kolom baru ke kumpulan properti DBPROPSET_SQLSERVERCOLUMN.

Nama Tipe Deskripsi
SSPROP_COL_XML_SCHEMACOLLECTION_CATALOGNAME VT_BSTR Untuk kolom XML yang diketik, properti ini adalah string yang menentukan nama katalog tempat skema XML disimpan. Untuk tipe kolom lain, properti ini mengembalikan string kosong.
SSPROP_COL_XML_SCHEMACOLLECTION_SCHEMANAME VT_BSTR Untuk kolom XML yang diketik, properti ini adalah string yang menentukan nama skema XML yang menentukan kolom ini.
SSPROP_COL_XML_SCHEMACOLLECTIONNAME VT_BSTR Untuk kolom XML yang diketik, properti ini adalah string yang menentukan nama kumpulan skema XML skema yang menentukan nilai.

Seperti nilai SSPROP_PARAM, semua properti ini bersifat opsional dan default kosong. SSPROP_COL_XML_SCHEMACOLLECTION_CATALOGNAME dan SSPROP_COL_XML_SCHEMACOLLECTION_SCHEMANAME hanya dapat ditentukan jika SSPROP_COL_XML_SCHEMACOLLECTIONNAME ditentukan. Saat meneruskan XML ke server, jika nilai-nilai ini disertakan, nilai tersebut diperiksa keberadaannya (validitas) terhadap database saat ini dan data instans diperiksa terhadap skema. Dalam semua kasus, untuk menjadi valid, semuanya kosong atau semua diisi.

Penambahan dan Perubahan Antarmuka OLE DB

SQL Server Native Client menambahkan nilai atau perubahan baru ke banyak antarmuka OLE DB inti.

Antarmuka ISSCommandWithParameters

Untuk mendukung jenis data xml melalui OLE DB, SQL Server Native Client mengimplementasikan sejumlah perubahan termasuk penambahan antarmuka ISSCommandWithParameters . Antarmuka baru ini mewarisi dari antarmuka inti OLE DB ICommandWithParameters. Selain tiga metode yang diwarisi dari ICommandWithParameters; GetParameterInfo, MapParameterNames, dan SetParameterInfo; ISSCommandWithParameters menyediakan metode GetParameterProperties dan SetParameterProperties yang digunakan untuk menangani jenis data spesifik server.

Catatan

Antarmuka ISSCommandWithParameters juga menggunakan struktur SSPARAMPROPS baru.

Antarmuka IColumnsRowset

SQL Server Native Client menambahkan kolom khusus SQL Server berikut ke set baris yang dikembalikan oleh metode IColumnRowset::GetColumnsRowset . Kolom ini berisi nama tiga bagian dari koleksi skema XML. Untuk kolom non-XML atau kolom XML yang tidak dititik, ketiga kolom mengambil nilai default NULL.

Nama kolom Tipe Deskripsi
DBCOLUMN_SS_XML_SCHEMACOLLECTION_CATALOGNAME DBTYPE_WSTR Katalog yang dimiliki koleksi skema XML,

NULL sebaliknya.
DBCOLUMN_SS_XML_SCHEMACOLLECTION_SCHEMANAME DBTYPE_WSTR Skema yang dimiliki koleksi skema XML. NULL sebaliknya.
DBCOLUMN_SS_XML_SCHEMACOLLECTIONNAME DBTYPE_WSTR Nama kumpulan skema XML untuk kolom XML yang diketik, sebaliknya NULL.

Antarmuka IRowset

Instans XML dalam kolom XML diambil melalui metode IRowset::GetData . Bergantung pada pengikatan yang ditentukan oleh klien, instans XML dapat diambil sebagai DBTYPE_BSTR, DBTYPE_WSTR, DBTYPE_VARIANT, DBTYPE_XML, DBTYPE_STR, DBTYPE_BYTES, atau sebagai antarmuka melalui DBTYPE_IUNKNOWN. Jika konsumen menentukan DBTYPE_BSTR, DBTYPE_WSTR, atau DBTYPE_VARIANT, penyedia mengonversi instans XML ke jenis yang diminta pengguna dan memasukkannya ke lokasi yang ditentukan dalam pengikatan yang sesuai.

Jika konsumen menentukan DBTYPE_IUNKNOWN dan mengatur argumen pObject ke NULL, atau mengatur argumen pObject ke IID_ISequentialStream, penyedia mengembalikan antarmuka ISequentialStream ke konsumen sehingga konsumen dapat mengalirkan data XML dari kolom. ISequentialStream kemudian mengembalikan data XML sebagai aliran karakter Unicode.

Saat mengembalikan nilai XML yang terikat ke DBTYPE_IUNKNOWN, penyedia melaporkan nilai sizeof (IUnknown *)ukuran . Perhatikan bahwa ini konsisten dengan pendekatan yang diambil ketika kolom terikat sebagai DBTYPE_IUnknown atau DBTYPE_IDISPATCH, dan dengan DBTYPE_IUNKNOWN/ISequentialStream ketika ukuran kolom yang tepat tidak dapat ditentukan.

Antarmuka IRowsetChange

Ada dua cara konsumen dapat memperbarui instans XML dalam kolom. Yang pertama adalah melalui objek penyimpanan ISequentialStream yang dibuat oleh penyedia. Konsumen dapat memanggil metode ISequentialStream::Write untuk langsung memperbarui instans XML yang dikembalikan oleh penyedia.

Pendekatan kedua adalah melalui metode IRowsetChange::SetData atau IRowsetChange::InsertRow . Dalam pendekatan ini, instans XML di buffer konsumen dapat ditentukan dalam pengikatan jenis DBTYPE_BSTR, DBTYPE_WSTR, DBTYPE_VARIANT, DBTYPE_XML, atau DBTYPE_IUNKNOWN.

Dalam kasus DBTYPE_BSTR, DBTYPE_WSTR, atau DBTYPE_VARIANT, penyedia menyimpan instans XML yang berada di buffer konsumen ke kolom yang tepat.

Dalam kasus DBTYPE_IUNKNOWN/ISequentialStream, jika konsumen tidak menentukan objek penyimpanan apa pun, konsumen harus membuat objek ISequentialStream terlebih dahulu, mengikat dokumen XML dengan objek, lalu meneruskan objek ke penyedia melalui metode IRowsetChange::SetData . Konsumen juga dapat membuat objek penyimpanan, mengatur argumen pObject ke IID_ISequentialStream, membuat objek ISequentialStream lalu meneruskan objek ISequentialStream ke metode IRowsetChange::SetData. Dalam kedua kasus, penyedia dapat mengambil objek XML melalui objek ISequentialStream dan menyisipkannya ke dalam kolom yang tepat.

Antarmuka IRowsetUpdate

Antarmuka IRowsetUpdate menyediakan fungsionalitas untuk pembaruan yang tertunda. Data yang tersedia untuk set baris tidak tersedia untuk transaksi lain sampai konsumen memanggil metode IRowsetUpdate:Update .

Antarmuka IRowsetFind

Metode IRowsetFind::FindNextRow tidak berfungsi dengan jenis data xml . Ketika IRowsetFind::FindNextRow dipanggil dan argumen hAccessor menentukan kolom DBTYPE_XML, DB_E_BADBINDINFO dikembalikan. Ini terjadi terlepas dari jenis kolom yang sedang dicari. Untuk jenis pengikatan lainnya, FindNextRow gagal dengan DB_E_BADCOMPAREOP jika kolom yang akan dicari adalah tipe data xml .

Driver ODBC Klien Asli SQL Server

Dalam driver ODBC SQL Server Native Client, sejumlah perubahan telah dilakukan pada berbagai fungsi untuk mendukung jenis data xml .

SQLColAttribute

Fungsi SQLColAttribute memiliki tiga pengidentifikasi bidang baru, termasuk SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME, SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME, dan SQL_CA_SS _XML_SCHEMACOLLECTION_NAME.

Driver ODBC Klien Asli SQL Server melaporkan SQL_SS_LENGTH_UNLIMITED untuk kolom SQL_DESC_DISPLAY_SIZE dan SQL_DESC_LENGTH.

SQLColumns

Fungsi SQLColumns memiliki tiga kolom baru termasuk SS_XML_SCHEMACOLLECTION_CATALOG_NAME, SS_XML_SCHEMACOLLECTION_SCHEMA_NAME, dan SS_XML_SCHEMACOLLECTION_NAME. Kolom TYPE_NAME yang ada digunakan untuk menunjukkan nama jenis XML, dan DATA_TYPE untuk kolom atau parameter jenis XML SQL_SS_XML.

Driver ODBC Klien Asli SQL Server melaporkan SQL_SS_LENGTH_UNLIMITED untuk nilai COLUMN_SIZE dan CHAR_OCTET_LENGTH.

SQLDescribeCol

Driver ODBC Klien Asli SQL Server melaporkan SQL_SS_LENGTH_UNLIMITED ketika ukuran kolom tidak dapat ditentukan dalam fungsi SQLDescribeCol .

SQLGetTypeInfo

Driver ODBC Klien Asli SQL Server melaporkan SQL_SS_LENGTH_UNLIMITED sebagai COLUMN_SIZE maksimum untuk jenis data xml dalam fungsi SQLGetTypeInfo .

SQLProcedureColumns

Fungsi SQLProcedureColumns memiliki penambahan kolom yang sama dengan fungsi SQLColumns .

Driver ODBC Klien Asli SQL Server melaporkan SQL_SS_LENGTH_UNLIMITED sebagai COLUMN_SIZE maksimum untuk jenis data xml .

Konversi yang Didukung

Saat mengonversi dari jenis data SQL ke C, SQL_C_WCHAR, SQL_C_BINARY, dan SQL_C_CHAR semuanya dapat dikonversi ke SQL_SS_XML, dengan ketentuan berikut:

  • SQL_C_WCHAR: Format adalah UTF-16, tanpa tanda urutan byte (BOM), dengan penghentian null.

  • SQL_C_BINARY: Format adalah UTF-16, tanpa penghentian null. BOM ditambahkan ke data yang diterima dari server. Jika string kosong dikembalikan oleh server, BOM masih dikembalikan ke aplikasi. Jika panjang buffer adalah jumlah byte ganjil, data terpotong dengan benar. Jika seluruh nilai dikembalikan dalam gugus, nilai tersebut dapat digabungkan untuk menyusun kembali nilai yang benar

  • SQL_C_CHAR: Format adalah karakter multibyte yang dikodekan di halaman kode klien dengan penghentian null. Konversi dari server yang disediakan UTF-16 dapat menyebabkan kerusakan data, sehingga pengikatan ini sangat tidak disarankan.

Saat mengonversi dari jenis data C ke SQL, SQL_C_WCHAR, SQL_C_BINARY, dan SQL_C_CHAR semuanya dapat dikonversi ke SQL_SS_XML, dengan ketentuan berikut:

  • SQL_C_WCHAR: BOM selalu ditambahkan ke data yang dikirim ke server. Jika data sudah dimulai dengan BOM, ini menghasilkan dua BOM di awal buffer. Server menggunakan BOM pertama untuk mengenali pengodean sebagai UTF-16 lalu membuangnya. BOM kedua ditafsirkan sebagai karakter spasi nonbreaking lebar nol.

  • SQL_C_BINARY: Tidak ada konversi yang dilakukan, dan data diteruskan ke server "apa adanya." Data UTF-16 harus dimulai dengan BOM; jika tidak, pengodean mungkin tidak dikenali dengan benar oleh server.

  • SQL_C_CHAR: Data dikonversi ke UTF-16 pada klien dan dikirim ke server sama seperti SQL_C_WCHAR (termasuk penambahan BOM). Jika XML tidak dikodekan di halaman kode klien, ini dapat menyebabkan kerusakan data.

Standar XML memerlukan XML yang dikodekan UTF-16 untuk memulai dengan tanda urutan byte (BOM), kode karakter UTF-16 0xFEFF. Saat bekerja dengan pengikatan SQL_C_BINARY, SQL Server Native Client tidak memerlukan atau menambahkan BOM, karena pengodean tersirat oleh pengikatan. Tujuannya adalah untuk memberikan kesederhanaan dalam menangani prosesor XML dan sistem penyimpanan lainnya. Dalam hal ini BOM harus ada dengan XML yang dikodekan UTF-16, dan aplikasi tidak perlu khawatir dengan pengodean aktual, karena sebagian besar prosesor XML (termasuk SQL Server) menyimpulkan pengodean dengan memeriksa beberapa byte pertama dari nilai. Data XML yang diterima dari SQL Server Native Client menggunakan pengikatan SQL_C_BINARY selalu dikodekan dalam UTF-16 dengan BOM dan tanpa deklarasi pengodean yang disematkan.

Lihat Juga

Fitur Klien Asli SQL Server
ISSCommandWithParameters (OLE DB)