SQLGetData
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
SQLGetData digunakan untuk mengambil data kumpulan hasil tanpa mengikat nilai kolom. SQLGetData dapat dipanggil secara berturut-turut pada kolom yang sama untuk mengambil data dalam jumlah besar dari kolom dengan teks, ntext, atau jenis data gambar.
Tidak ada persyaratan bahwa variabel pengikatan aplikasi untuk mengambil data tataan hasil. Data kolom apa pun dapat diambil dari driver ODBC SQL Server Native Client dengan menggunakan SQLGetData.
Driver ODBC Klien Asli SQL Server tidak mendukung penggunaan SQLGetData untuk mengambil data dalam urutan kolom acak. Semua kolom yang tidak terikat yang diproses dengan SQLGetData harus memiliki ordinal kolom yang lebih tinggi daripada kolom terikat dalam tataan hasil. Aplikasi harus memproses data dari nilai kolom ordinal terendah yang tidak terikat ke yang tertinggi. Mencoba mengambil data dari kolom bernomor biasa yang lebih rendah menghasilkan kesalahan. Jika aplikasi menggunakan kursor server untuk melaporkan baris tataan hasil, aplikasi dapat mengambil kembali baris saat ini lalu mengambil nilai kolom. Jika pernyataan dijalankan pada kursor baca-saja dan hanya-terusan default, Anda harus menjalankan kembali pernyataan untuk mencadangkan SQLGetData.
Driver ODBC Klien Asli SQL Server secara akurat melaporkan panjang data teks, ntext, dan gambar yang diambil menggunakan SQLGetData. Aplikasi ini dapat memanfaatkan parameter StrLen_or_IndPtr dengan baik untuk mengambil data panjang dengan cepat.
Catatan
Untuk jenis nilai besar, StrLen_or_IndPtr akan mengembalikan SQL_NO_TOTAL dalam kasus pemotongan data.
Dukungan SQLGetData untuk Fitur Tanggal dan Waktu yang Ditingkatkan
Nilai kolom hasil jenis tanggal/waktu dikonversi seperti yang dijelaskan dalam Konversi dari SQL ke C.
Untuk informasi selengkapnya, lihat Peningkatan Tanggal dan Waktu (ODBC).
Dukungan SQLGetData untuk UDT CLR Besar
SQLGetData mendukung jenis (UDT) yang ditentukan pengguna CLR besar. Untuk informasi selengkapnya, lihat Jenis Yang Ditentukan Pengguna (ODBC) CLR Besar.
Contoh
SQLHDBC hDbc = NULL;
SQLHSTMT hStmt = NULL;
long lEmpID;
PBYTE pPicture;
SQLINTEGER pIndicators[2];
// Get an environment, connection, and so on.
...
// Get a statement handle and execute a command.
SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
if (SQLExecDirect(hStmt,
(SQLCHAR*) "SELECT EmployeeID, Photo FROM Employees",
SQL_NTS) == SQL_ERROR)
{
// Handle error and return.
}
// Retrieve data from row set.
SQLBindCol(hStmt, 1, SQL_C_LONG, (SQLPOINTER) &lEmpID, sizeof(long),
&pIndicators[0]);
while (SQLFetch(hStmt) == SQL_SUCCESS)
{
cout << "EmployeeID: " << lEmpID << "\n";
// Call SQLGetData to determine the amount of data that's waiting.
if (SQLGetData(hStmt, 2, SQL_C_BINARY, pPicture, 0, &pIndicators[1])
== SQL_SUCCESS_WITH_INFO)
{
cout << "Photo size: " pIndicators[1] << "\n\n";
// Get all the data at once.
pPicture = new BYTE[pIndicators[1]];
if (SQLGetData(hStmt, 2, SQL_C_DEFAULT, pPicture,
pIndicators[1], &pIndicators[1]) != SQL_SUCCESS)
{
// Handle error and continue.
}
delete [] pPicture;
}
else
{
// Handle error on attempt to get data length.
}
}