Înregistrări și câmpuri de diagnosticare

Înregistrările de diagnosticare sunt asociate cu mediile ODBC, conexiune, instrucțiuni sau indicatori descriptori. Atunci când orice funcție ODBC returnează un cod de întoarcere, alta decât SQL_SUCCESS sau SQL_INVALID_HANDLE, mâner, apelați funcția sa asociat înregistrările de diagnostic care conțin mesaje informative sau mesaje de eroare. Aceste înregistrări sunt reținute până când se numește o altă funcție utilizând acest descriptor, moment în care înregistrările sunt anulate. Nu există nici o limită a numărului de înregistrări de diagnostic asociate descriptorului în același timp.







Există două tipuri de înregistrări de diagnosticare: un titlu și un statut. Înregistrarea antetului este numărul 0; dacă există înregistrări de stare, atunci au numere de la 1 la început. Înregistrările de diagnosticare conțin diferite câmpuri pentru intrarea antetului și pentru înregistrările de stare. Componentele ODBC pot, de asemenea, să definească propriile câmpuri ale înregistrărilor de diagnosticare.

Câmpurile din înregistrarea antetului conțin informații generale despre execuția funcției, inclusiv codul de returnare, numărul de rânduri, numărul de înregistrări de stare și tipul de instrucțiune care este executată. O înregistrare antet este întotdeauna creată, cu excepția cazului în care funcția ODBC returnează SQL_INVALID_HANDLE. Pentru o listă completă a câmpurilor din intrarea antetului, consultați SQLGetDiagField.

Câmpurile din înregistrările de stare conține informații despre mesajele de eroare și de avertizare specifice, care sunt returnate de către managerul de driver ODBC, driver-ul sau sursa datelor, inclusiv valoarea SQLSTATE, numărul vina propriu, mesajul de diagnosticare, numărul coloanei și numărul rândului. Starea de înregistrare sunt create numai în cazul în care funcția returnează SQL_ERROR, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_NEED_DATA sau SQL_STILL_EXECUTING. Pentru o listă completă a câmpurilor din înregistrările de stare, consultați SQLGetDiagField.







Funcția SQLGetDiagRec primește o singură înregistrare de diagnostic, împreună cu valoarea SQLSTATE ODBC, propriul număr de eroare și câmpurile de mesaje de diagnosticare. Această funcție este similară cu funcția SQLError din ODBC 2.x. Funcția cea mai simplă de tratare a erorilor în ODBC 3.x este apelul repetat la SQLGetDiagRec. pornind de la valoarea parametrului de referință RecNumber 1 atunci parametrul RecNumber este incrementat cu 1, atâta timp cât funcția returnează SQLGetDiagRec SQL_NO_DATA. Aceasta este echivalentă cu apelarea funcției SQLError din aplicația ODBC 2.x până când aceasta returnează SQL_NO_DATA_FOUND.

ODBC 3.x suportă mult mai multe informații de diagnostic decât ODBC 2.x. Aceste informații sunt stocate în câmpuri suplimentare din înregistrările de diagnostic obținute utilizând funcția SQLGetDiagField.

Driverul SQL ODBC pentru clienți nativi SQL Server conține câmpuri de diagnostic specifice driverului care pot fi accesate utilizând funcția SQLGetDiagField. Etichetele pentru aceste câmpuri specifice driverului sunt definite în fișierul sqlncli.h. Utilizând aceste etichete, puteți obține statutul serverului SQL, severitatea, numele serverului, numele procedurii și numărul liniei asociate cu fiecare înregistrare de diagnosticare. De asemenea, fișier de definire a sqlncli.h conține coduri care sunt folosite pentru a identifica instrucțiunile driverului Transact-SQL dacă aplicația apelează funcția SQLGetDiagField cu o valoare predeterminată pentru parametrul SQL_DIAG_DYNAMIC_FUNCTION_CODE DiagIdentifier.

Funcția SQLGetDiagField este gestionată de managerul de driver ODBC folosind informațiile de eroare stocate din driverul de bază. Managerul de drivere ODBC nu cachează câmpurile de diagnosticare specifice driverului înainte de a se stabili o conexiune reușită. Funcția SQLGetDiagField returnează SQL_ERROR dacă a fost chemat să obțină câmpuri de diagnostic specifice unui anumit driver înainte de finalizarea conexiunii de succes. Dacă funcția de conectare ODBC returnează SQL_SUCCESS_WITH_INFO, câmpurile de diagnosticare specifice driverului nu sunt încă disponibile pentru funcția de conectare. Funcția SQLGetDiagField pentru anumite domenii de conducător auto de diagnosticare pot apela după apelul se face și funcția de conectare după apelul ODBC la o altă funcție.







Articole similare

Trimiteți-le prietenilor: