Bagikan melalui


Rekaman dan Bidang Diagnostik

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Catatan diagnostik dikaitkan dengan lingkungan ODBC, koneksi, pernyataan, atau handel deskriptor. Ketika setiap fungsi ODBC menaikkan kode pengembalian selain SQL_SUCCESS atau SQL_INVALID_HANDLE, handel yang dipanggil oleh fungsi memiliki rekaman diagnostik terkait yang berisi pesan informasi atau kesalahan. Rekaman ini dipertahankan sampai fungsi lain dipanggil menggunakan handel tersebut, pada saat itu mereka dibuang. Tidak ada batasan jumlah rekaman diagnostik yang dapat dikaitkan dengan handel kapan saja.

Ada dua jenis rekaman diagnostik: header dan status. Rekaman header adalah rekaman 0; ketika ada rekaman status, mereka adalah rekaman 1 dan yang lebih baru. Rekaman diagnostik berisi bidang yang berbeda untuk rekaman header dan rekaman status. Komponen ODBC juga dapat menentukan bidang rekaman diagnostik mereka sendiri.

Bidang dalam rekaman header berisi informasi umum tentang eksekusi fungsi, termasuk kode pengembalian, jumlah baris, jumlah rekaman status, dan jenis pernyataan yang dijalankan. Rekaman header selalu dibuat kecuali fungsi ODBC mengembalikan SQL_INVALID_HANDLE. Untuk daftar lengkap bidang di rekaman header, lihat SQLGetDiagField.

Bidang dalam rekaman status berisi informasi tentang kesalahan atau peringatan tertentu yang dikembalikan oleh Manajer Driver ODBC, driver, atau sumber data, termasuk SQLSTATE, nomor kesalahan asli, pesan diagnostik, nomor kolom, dan nomor baris. Rekaman status dibuat hanya jika fungsi mengembalikan SQL_ERROR, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_NEED_DATA, atau SQL_STILL_EXECUTING. Untuk daftar lengkap bidang dalam rekaman status, lihat SQLGetDiagField.

SQLGetDiagRec mengambil satu catatan diagnostik bersama dengan ODBC SQLSTATE, nomor kesalahan asli, dan bidang pesan diagnostik. Fungsionalitas ini mirip dengan ODBC 2.xFungsi SQLError . Fungsi penanganan kesalahan paling sederhana di ODBC 3.x adalah untuk berulang kali memanggil SQLGetDiagRec yang dimulai dengan parameter RecNumber yang diatur ke 1 dan tahapan RecNumber sebesar 1 hingga SQLGetDiagRec mengembalikan SQL_NO_DATA. Ini setara dengan ODBC 2.x aplikasi memanggil SQLError sampai kembali SQL_NO_DATA_FOUND.

ODBC 3.x mendukung informasi diagnostik yang jauh lebih banyak daripada ODBC 2.x. Informasi ini disimpan dalam bidang tambahan dalam catatan diagnostik yang diambil dengan menggunakan SQLGetDiagField.

Driver ODBC SQL Server Native Client memiliki bidang diagnostik khusus driver yang dapat diambil dengan SQLGetDiagField. Label untuk bidang khusus driver ini didefinisikan dalam sqlncli.h. Gunakan label ini untuk mengambil status SQL Server, tingkat keparahan, nama server, nama prosedur, dan nomor baris yang terkait dengan setiap rekaman diagnostik. Selain itu, sqlncli.h berisi definisi kode yang digunakan driver untuk mengidentifikasi pernyataan Transact-SQL jika aplikasi memanggil SQLGetDiagField dengan DiagIdentifier diatur ke SQL_DIAG_DYNAMIC_FUNCTION_CODE.

SQLGetDiagField diproses oleh Odbc Driver Manager menggunakan informasi kesalahan yang di-cache dari driver yang mendasarinya. Manajer Driver ODBC tidak menyimpan bidang diagnostik khusus driver hingga setelah koneksi berhasil dibuat. SQLGetDiagField mengembalikan SQL_ERROR jika dipanggil untuk mendapatkan bidang diagnostik khusus driver sebelum koneksi yang berhasil diselesaikan. Jika fungsi koneksi ODBC mengembalikan SQL_SUCCESS_WITH_INFO, bidang diagnostik khusus driver untuk fungsi sambungkan belum tersedia. Anda dapat mulai memanggil SQLGetDiagField untuk bidang diagnostik khusus driver hanya setelah Anda melakukan panggilan fungsi ODBC lain setelah fungsi sambungkan.

Sebagian besar kesalahan yang dilaporkan oleh driver ODBC SQL Server Native Client dapat didiagnosis secara efektif hanya menggunakan informasi yang dikembalikan oleh SQLGetDiagRec. Namun, dalam beberapa kasus, informasi yang dikembalikan oleh bidang diagnostik khusus driver penting dalam mendiagnosis kesalahan. Saat mengkoding handler kesalahan ODBC untuk aplikasi yang menggunakan driver ODBC SQL Server Native Client, ada baiknya juga menggunakan SQLGetDiagField untuk mengambil setidaknya SQL_DIAG_SS_MSGSTATE dan SQL_DIAG_SS_SEVERITY bidang khusus driver. Jika kesalahan tertentu dapat dimunculkan di beberapa lokasi dalam kode SQL Server, SQL_DIAG_SS_MSGSTATE menunjukkan kepada teknisi dukungan Microsoft secara khusus di mana kesalahan dimunculkan, yang terkadang membantu dalam mendiagnosis masalah.

Lihat Juga

Menangani Kesalahan dan Pesan