SQLDescribeCol und SQLColAttribute
SQLDescribeCol und SQLColAttribute werden zum Abrufen von Resultsetmetadaten verwendet. Der Unterschied zwischen diesen beiden Funktionen besteht darin, dass SQLDescribeCol immer die gleichen fünf Informationen zurückgibt (Name, Datentyp, Genauigkeit, Skalierung und Nullierbarkeit einer Spalte), während SQLColAttribute ein einzelnes Informationsstück zurückgibt, das von der Anwendung angefordert wird. SQLColAttribute kann jedoch eine viel umfangreichere Auswahl von Metadaten zurückgeben, einschließlich der Groß-/Kleinschreibung, der Anzeigegröße, der Datenverfügbarkeit und der Suchbarkeit einer Spalte.
Viele Anwendungen, insbesondere solche, die nur Daten anzeigen, erfordern nur die von SQLDescribeCol zurückgegebenen Metadaten. Für diese Anwendungen ist es schneller, SQLDescribeCol als SQLColAttribute zu verwenden, da die Informationen in einem einzigen Aufruf zurückgegeben werden. Andere Anwendungen, insbesondere solche, die Daten aktualisieren, erfordern die von SQLColAttribute zurückgegebenen zusätzlichen Metadaten und verwenden daher beide Funktionen. Darüber hinaus unterstützt SQLColAttribute treiberspezifische Metadaten. Weitere Informationen finden Sie unter Treiberspezifische Datentypen, Deskriptortypen, Informationstypen, Diagnosetypen und Attribute.
Eine Anwendung kann Jederzeit Resultsetmetadaten abrufen, nachdem eine Anweisung vorbereitet oder ausgeführt wurde und bevor der Cursor über das Resultset geschlossen wird. Sehr wenige Anwendungen erfordern Resultsetmetadaten, nachdem die Anweisung vorbereitet wurde und bevor sie ausgeführt wird. Wenn möglich, sollten Anwendungen darauf warten, Metadaten abzurufen, bis die Anweisung ausgeführt wurde, da einige Datenquellen keine Metadaten für vorbereitete Anweisungen zurückgeben und diese Funktion im Treiber emulieren können, ist häufig ein langsamer Prozess. Beispielsweise kann der Treiber ein Resultset mit null Zeilen generieren, indem die WHERE-Klausel einer SELECT-Anweisung durch die Klausel WHERE 1 = 2 ersetzt und die resultierende Anweisung ausgeführt wird.
Metadaten sind häufig teuer, um aus der Datenquelle abzurufen. Aus diesem Grund sollten Treiber alle Metadaten zwischenspeichern, die sie vom Server abrufen, und halten sie so lange, wie der Cursor über dem Resultset geöffnet ist. Außerdem sollten Anwendungen nur die metadaten anfordern, die sie unbedingt benötigen.