Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Diagnostische records zijn gekoppeld aan ODBC-omgevingen, verbindingen, statements of descriptor-handnamen. Wanneer een ODBC-functie een retourcode oproept die anders is dan SQL_SUCCESS of SQL_INVALID_HANDLE, heeft de handle die door de functie wordt aangeroepen diagnostische records die informatie- of foutmeldingen bevatten. Deze records worden bewaard totdat een andere functie met die handle wordt aangeroepen, waarna ze worden verwijderd. Er is geen limiet aan het aantal diagnostische records dat op elk moment aan een handle kan worden gekoppeld.
Er zijn twee soorten diagnostische records: header en status. Het headerrecord is record 0; Als er statusrecords zijn, zijn dat records 1 en later. Diagnostische records bevatten verschillende velden voor het headerrecord en de statusrecords. ODBC-componenten kunnen ook hun eigen diagnostische recordvelden definiëren.
Velden in het headerrecord bevatten algemene informatie over de uitvoering van een functie, waaronder de retourcode, het aantal rijen, het aantal statusrecords en het type uitgevoerde instructie. Het headerrecord wordt altijd aangemaakt, tenzij een ODBC-functie SQL_INVALID_HANDLE teruggeeft. Voor een volledige lijst van velden in het headerrecord, zie SQLGetDiagField.
Velden in de statusrecords bevatten informatie over specifieke fouten of waarschuwingen die worden teruggegeven door de ODBC Driver Manager, driver of databron, waaronder de SQLSTATE, het native foutnummer, het diagnostisch bericht, het kolomnummer en het rijnummer. Statusrecords worden alleen aangemaakt als de functie SQL_ERROR, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_NEED_DATA of SQL_STILL_EXECUTING teruggeeft. Voor een volledige lijst van velden in de statusrecords, zie SQLGetDiagField.
SQLGetDiagRec haalt één diagnostisch record op, samen met de ODBC SQLSTATE-, native foutnummer en diagnoseberichtvelden. Deze functionaliteit lijkt op die van de ODBC 2. xSQLError-functie . De eenvoudigste foutafhandelingsfunctie in ODBC 3. x is om herhaaldelijk SQLGetDiagRec aan te roepen, beginnend met de RecNumber-parameter ingesteld op 1, en RecNumber met 1 te verhogen totdat SQLGetDiagRec SQL_NO_DATA teruggeeft. Dit is gelijk aan een ODBC 2. x applicatie die SQLError aanroept totdat deze SQL_NO_DATA_FOUND teruggeeft.
ODBC 3. x ondersteunt veel meer diagnostische informatie dan ODBC 2. x. Deze informatie wordt opgeslagen in extra velden in diagnostische records die worden opgehaald met behulp van SQLGetDiagField.
De SQL Server Native Client ODBC-driver heeft driver-specifieke diagnostische velden die kunnen worden opgehaald met SQLGetDiagField. Labels voor deze driver-specifieke velden zijn gedefinieerd in sqlncli.h. Gebruik deze labels om de SQL Server-status, ernstniveau, servernaam, procedurenaam en regelnummer op te halen die aan elk diagnostisch record zijn gekoppeld. Ook bevat sqlncli.h definities van de codes die de driver gebruikt om Transact-SQL statements te identificeren als een applicatie SQLGetDiagField aanroept met DiagIdentifier ingesteld op SQL_DIAG_DYNAMIC_FUNCTION_CODE.
SQLGetDiagField wordt verwerkt door de ODBC Driver Manager met behulp van foutinformatie die het cachet van de onderliggende driver. De ODBC Driver Manager cachet stuurderspecifieke diagnostische velden pas nadat een succesvolle verbinding is gemaakt. SQLGetDiagField geeft SQL_ERROR terug als het wordt aangeroepen om driver-specifieke diagnostische velden te krijgen voordat een succesvolle verbinding is voltooid. Als een ODBC-connectfunctie SQL_SUCCESS_WITH_INFO terugkeert, zijn de driver-specifieke diagnostische velden voor de connect-functie nog niet beschikbaar. Je kunt SQLGetDiagField voor driver-specifieke diagnostische velden pas aanroepen nadat je een andere ODBC-functieaanroep hebt gedaan na de connect-functie.
De meeste fouten die door de SQL Server Native Client ODBC-driver worden gerapporteerd, kunnen effectief worden gediagnosticeerd met alleen de informatie die door SQLGetDiagRec wordt teruggegeven. In sommige gevallen is de informatie die door de driver-specifieke diagnostische velden wordt teruggegeven echter belangrijk bij het diagnosticeren van een fout. Bij het coderen van een ODBC-fouthandler voor applicaties die de SQL Server Native Client ODBC-driver gebruiken, is het een goed idee om ook SQLGetDiagField te gebruiken om ten minste de SQL_DIAG_SS_MSGSTATE en SQL_DIAG_SS_SEVERITY driver-specifieke velden op te halen. Als een bepaalde fout op meerdere locaties in de SQL Server code kan worden opgemerkt, geeft SQL_DIAG_SS_MSGSTATE aan een Microsoft support engineer specifiek aan waar een fout is opgeroepen, wat soms helpt bij het diagnosticeren van een probleem.