Freigeben über


Abrufen von Datentypinformationen mit SQLGetTypeInfo

Da die Zuordnungen von zugrunde liegenden SQL-Datentypen zu ODBC-Typbezeichnern ungefähr sind, stellt ODBC eine Funktion (SQLGetTypeInfo) bereit, über die ein Treiber jeden SQL-Datentyp in der Datenquelle vollständig beschreiben kann. Diese Funktion gibt ein Resultset zurück, von dem jede Zeile die Merkmale eines einzelnen Datentyps beschreibt, z. B. Name, Typbezeichner, Genauigkeit, Skalierung und Nullierbarkeit.

Diese Informationen werden in der Regel von generischen Anwendungen verwendet, die es dem Benutzer ermöglichen, Tabellen zu erstellen und zu ändern. Solche Anwendungen rufen SQLGetTypeInfo auf, um die Datentypinformationen abzurufen und dann einige oder alle informationen für den Benutzer darzustellen. Solche Anwendungen müssen sich zwei Dinge bewusst sein:

  • Mehrere SQL-Datentypen können einem einzelnen Typbezeichner zugeordnet werden, was die Ermittlung des zu verwendenden Datentyps erschweren kann. Um dies zu lösen, wird das Resultset zuerst nach Typbezeichner und zweiter nach Nähe zur Definition des Typbezeichners sortiert. Darüber hinaus haben datenquellendefinierte Datentypen Vorrang vor benutzerdefinierten Datentypen. Angenommen, eine Datenquelle definiert die Datentypen INTEGER und COUNTER, die identisch sein sollen, mit der Ausnahme, dass COUNTER automatisch erhöht wird. Angenommen, der benutzerdefinierte Typ WHOLENUM ist ein Synonym für INTEGER. Jeder dieser Typen ist SQL_INTEGER zugeordnet. Im Resultset SQLGetTypeInfo wird INTEGER zuerst angezeigt, gefolgt von WHOLENUM und dann COUNTER. WHOLENUM wird nach INTEGER angezeigt, da sie benutzerdefinierter ist, aber vor COUNTER, da sie genauer mit der Definition des SQL_INTEGER Typbezeichners übereinstimmt.

  • ODBC definiert keine Datentypnamen für die Verwendung in CREATE TABLE - und ALTER TABLE-Anweisungen . Stattdessen sollte die Anwendung den namen verwenden, der in der spalte TYPE_NAME des von SQLGetTypeInfo zurückgegebenen Resultsets zurückgegeben wird. Der Grund dafür ist, dass die meisten SQL-Daten in DBMS nicht sehr unterschiedlich sind, die Datentypnamen jedoch enorm variieren. Anstatt Treiber zu erzwingen, SQL-Anweisungen zu analysieren und Standarddatentypnamen durch DBMS-spezifische Datentypnamen zu ersetzen, erfordert ODBC, dass Anwendungen die DBMS-spezifischen Namen zuerst verwenden.

Beachten Sie, dass SQLGetTypeInfo nicht unbedingt alle Datentypen beschreibt, auf die eine Anwendung stoßen kann. Insbesondere können Resultsets Datentypen enthalten, die von der Datenquelle nicht direkt unterstützt werden. Beispielsweise werden die Datentypen der Spalten in Resultsets, die von Katalogfunktionen zurückgegeben werden, von ODBC definiert, und diese Datentypen werden möglicherweise von der Datenquelle nicht unterstützt. Um die Merkmale der Datentypen in einem Resultset zu bestimmen, ruft eine Anwendung SQLColAttribute auf.