Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Diagnostiska poster är kopplade till ODBC-miljön, anslutningen, satsen eller deskriptorhandtagen. När någon ODBC-funktion anropar en returkod som inte är SQL_SUCCESS eller SQL_INVALID_HANDLE, har handtaget som anropas av funktionen tillhörande diagnostiska poster som innehåller informations- eller felmeddelanden. Dessa poster behålls tills en annan funktion anropas med det handtaget, då de kasseras. Det finns ingen gräns för hur många diagnostiska journaler som kan kopplas till ett handtag samtidigt.
Det finns två typer av diagnostiska poster: header och status. Headerposten är post 0; När det finns statusposter är det poster 1 och senare. Diagnostiska poster innehåller olika fält för headerposten och statusposterna. ODBC-komponenter kan också definiera sina egna diagnostiska postfält.
Fälten i headerposten innehåller allmän information om en funktions exekvering, inklusive returkod, radantal, antal statusposter och typ av utförd sats. Headerposten skapas alltid om inte en ODBC-funktion returnerar SQL_INVALID_HANDLE. För en komplett lista över fält i headerposten, se SQLGetDiagField.
Fält i statusposterna innehåller information om specifika fel eller varningar som returneras av ODBC Driver Manager, drivrutin eller datakälla, inklusive SQLSTATE, inbyggt felnummer, diagnosmeddelande, kolumnnummer och radnummer. Statusposter skapas endast om funktionen returnerar SQL_ERROR, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_NEED_DATA eller SQL_STILL_EXECUTING. För en komplett lista över fält i statusposterna, se SQLGetDiagField.
SQLGetDiagRec hämtar en enda diagnostisk post tillsammans med dess ODBC SQLSTATE, inbyggda felnummer och diagnostiska meddelandefält. Denna funktionalitet liknar ODBC 2. xSQLError-funktion . Den enklaste felhanteringsfunktionen i ODBC 3. x är att upprepade gånger anropa SQLGetDiagRec , med början från RecNumber-parametern satt till 1 och öka RecNumber med 1 tills SQLGetDiagRec returnerar SQL_NO_DATA. Detta motsvarar en ODBC 2. x applikation anropar SQLError tills den returnerar SQL_NO_DATA_FOUND.
ODBC 3. x stöder mycket mer diagnostisk information än ODBC 2. x. Denna information lagras i ytterligare fält i diagnostiska poster som hämtas med hjälp av SQLGetDiagField.
SQL Server Native Client ODBC-drivrutinen har drivrutinsspecifika diagnostikfält som kan hämtas med SQLGetDiagField. Etiketter för dessa drivrutinsspecifika fält definieras i sqlncli.h. Använd dessa etiketter för att hämta SQL Server-tillstånd, allvarlighetsgrad, servernamn, procedurnamn och radnummer som är kopplat till varje diagnostisk post. Dessutom innehåller sqlncli.h definitioner av de koder som drivrutinen använder för att identifiera Transact-SQL satser om en applikation anropar SQLGetDiagField med DiagIdentifier satt till SQL_DIAG_DYNAMIC_FUNCTION_CODE.
SQLGetDiagField bearbetas av ODBC Driver Manager med hjälp av felinformation som den cachar från den underliggande drivrutinen. ODBC Driver Manager cachar inte drivrutinsspecifika diagnostikfält förrän efter att en lyckad anslutning har gjorts. SQLGetDiagField returnerar SQL_ERROR om det anropas för att hämta drivrutinsspecifika diagnostikfält innan en lyckad anslutning har slutförts. Om en ODBC-anslutningsfunktion returnerar SQL_SUCCESS_WITH_INFO är de drivrutinsspecifika diagnostikfälten för anslutningsfunktionen ännu inte tillgängliga. Du kan börja anropa SQLGetDiagField för drivrutinsspecifika diagnostikfält först efter att du har gjort ett annat ODBC-funktionsanrop efter connect-funktionen.
De flesta fel som rapporteras av SQL Server Native Client ODBC-drivrutinen kan effektivt diagnostiseras med endast den information som returneras av SQLGetDiagRec. I vissa fall är dock informationen som returneras av drivrutinsspecifika diagnostikfält viktig för att diagnostisera ett fel. När du kodar en ODBC-felhanterare för applikationer som använder den SQL Server Native Client ODBC-drivrutinen är det en bra idé att även använda SQLGetDiagField för att hämta åtminstone de SQL_DIAG_SS_MSGSTATE och SQL_DIAG_SS_SEVERITY drivrutinsspecifika fälten. Om ett visst fel kan upptäckas på flera ställen i SQL Server-koden anger SQL_DIAG_SS_MSGSTATE en Microsoft supportingenjör specifikt var ett fel uppstod, vilket ibland hjälper till att diagnostisera ett problem.