SQLSTATEs
SQLSTATEs bieten detaillierte Informationen zur Ursache einer Warnung oder eines Fehlers. Die SQLSTATEs in diesem Handbuch basieren auf denen in der ISO/IEF CLI-Spezifikation, obwohl die SQLSTATEs, die mit Chat beginnen, spezifisch für ODBC sind.
Im Gegensatz zu Rückgabecodes sind die SQLSTATEs in diesem Handbuch Richtlinien, und Treiber sind nicht erforderlich, um sie zurückzugeben. Daher sollten Treiber den richtigen SQLSTATE-Wert für alle Fehler oder Warnungen zurückgeben, die sie erkennen können, anwendungen sollten sich nicht auf diesen immer auftretenden Fehler zählen. Die Gründe für diese Situation sind zweifach:
Unvollständigkeit Obwohl dieses Handbuch eine große Anzahl von Fehlern und Warnungen und möglichen Ursachen für diese Fehler und Warnungen auflistet, ist es nicht abgeschlossen und wird wahrscheinlich nie sein; Treiberimplementierungen variieren einfach zu viel. Jeder angegebene Treiber gibt wahrscheinlich nicht alle in diesem Handbuch aufgeführten SQLSTATEs zurück und gibt möglicherweise SQLSTATEs zurück, die in diesem Handbuch nicht aufgeführt sind.
Komplexität Einige Datenbankmodule - insbesondere relationale Datenbankmodule - geben buchstäblich Tausende von Fehlern und Warnungen zurück. Die Treiber für solche Engines sind unwahrscheinlich, dass alle diese Fehler und Warnungen sqlSTATEs zugeordnet werden, weil der Aufwand erforderlich ist, die Inextaktität der Zuordnungen, die große Größe des resultierenden Codes und der niedrige Wert des resultierenden Codes, der häufig Programmierfehler zurückgibt, die nie zur Laufzeit auftreten sollten. Daher sollten Treiber so viele Fehler und Warnungen zuordnen, wie angemessen erscheint, und achten Sie darauf, diese Fehler und Warnungen zuzuordnen, auf denen anwendungslogik basieren kann, z. B. SQLSTATE 01004 (Daten abgeschnitten).
Da SQLSTATEs nicht zuverlässig zurückgegeben werden, zeigen die meisten Anwendungen sie nur dem Benutzer zusammen mit der zugehörigen Diagnosemeldung an, die häufig auf den spezifischen fehler oder die warnung zugeschnitten ist, die aufgetreten ist, und systemeigenen Fehlercode. Es gibt selten einen Funktionsverlust, da Anwendungen die Programmierlogik für die meisten SQLSTATEs trotzdem nicht basieren können. Angenommen , SQLExecDirect gibt SQLSTATE 42000 zurück (Syntaxfehler oder Zugriffsverletzung). Wenn die SQL-Anweisung, die diesen Fehler verursacht hat, hartcodiert oder von der Anwendung erstellt wurde, ist dies ein Programmierfehler, und der Code muss behoben werden. Wenn die SQL-Anweisung vom Benutzer eingegeben wird, handelt es sich um einen Benutzerfehler, und die Anwendung hat alles getan, was möglich ist, indem der Benutzer über das Problem informiert wird.
Wenn Anwendungen die Basisprogrammierlogik für SQLSTATEs ausführen, sollten sie darauf vorbereitet werden, dass SQLSTATE nicht zurückgegeben wird oder dass ein anderer SQLSTATE zurückgegeben wird. Genau welche SQLSTATEs zuverlässig zurückgegeben werden, kann nur auf Erfahrungen mit zahlreichen Treibern basieren. Eine allgemeine Richtlinie ist jedoch, dass SQLSTATEs für Fehler, die im Treiber- oder Treiber-Manager auftreten, im Gegensatz zur Datenquelle zuverlässiger zurückgegeben werden. Die meisten Treiber geben beispielsweise SQLSTATE HYC00 (Optionales Feature nicht implementiert) zurück, während weniger Treiber wahrscheinlich SQLSTATE 42021 zurückgeben (Spalte ist bereits vorhanden).
Die folgenden SQLSTATEs geben Laufzeitfehler oder Warnungen an und sind gute Kandidaten, auf denen die Programmierlogik basieren soll. Es gibt jedoch keine Garantie dafür, dass alle Treiber sie zurückgeben.
01004 (Daten abgeschnitten)
01S02 (Optionswert geändert)
HY008 (Vorgang abgebrochen)
HYC00 (Optionales Feature nicht implementiert)
HYT00 (Timeout abgelaufen)
SQLSTATE HYC00 (Optionales Feature nicht implementiert) ist besonders wichtig, da es die einzige Möglichkeit ist, in der eine Anwendung bestimmen kann, ob ein Treiber eine bestimmte Anweisung oder ein bestimmtes Verbindungsattribut unterstützt.
Eine vollständige Liste der SQLSTATEs und der zurückgegebenen Funktionen finden Sie in Anhang A: ODBC-Fehlercodes. Eine ausführliche Erläuterung der Bedingungen, unter denen jede Funktion einen bestimmten SQLSTATE zurückgeben kann, finden Sie in dieser Funktion.