Zuordnen eines Anweisungshandles
Bevor eine Anwendung eine Anweisung ausführen kann, muss sie ein Anweisungshandle zuordnen. Zu diesem Zweck wird SQLAllocHandle aufgerufen, wobei der HandleType-Parameter auf SQL_HANDLE_STMT festgelegt wird und der InputHandle-Parameter auf ein Verbindungshandle zeigt.
Anweisungsattribute sind Eigenschaften des Anweisungshandles. Beispielanweisungsattribute können die Verwendung von Lesezeichen und den mit dem Resultset der Anweisung zu verwendenden Cursor beinhalten. Anweisungsattribute werden mit SQLSetStmtAttr festgelegt, und ihre aktuellen Einstellungen werden mit 'SQLGetStmtAttr' abgerufen. Es ist nicht erforderlich, dass eine Anwendung Anweisungsattribute festlegt; alle Anweisungsattribute haben Standardwerte und einige sind treiberspezifisch.
Gehen Sie bei der Verwendung mehrere ODBC-Anweisungs- und -Verbindungsoptionen vorsichtig vor. Das Aufrufen von SQLSetConnectAttr, wenn fOption auf SQL_ATTR_LOGIN_TIMEOUT festgelegt ist, steuert die Zeitspanne, während der eine Anwendung darauf wartet, dass ein Timeout für einen Verbindungsversuch auftritt, während sie darauf wartet, dass eine Verbindung hergestellt wird (0 steht für eine unendliche Zeitspanne). Für Sites mit langen Reaktionszeiten kann hierfür ein hoher Wert festgelegt werden, um sicherzustellen, dass zum Herstellen von Verbindungen ausreichend Zeit eingeräumt wird. Jedoch sollte das Intervall stets so niedrig sein, dass der Benutzer nach einer angemessenen Zeitspanne benachrichtig wird, wenn der Treiber keine Verbindung herstellen kann.
Das Aufrufen von SQLSetStmtAttr, wenn fOption auf SQL_ATTR_QUERY_TIMEOUT festgelegt ist, legt ein Abfragetimeoutintervall fest, um den Server und den Benutzer vor Abfragen mit langer Ausführungszeit zu schützen.
Das Aufrufen von SQLSetStmtAttr, wenn fOption auf SQL_ATTR_MAX_LENGTH festgelegt ist, schränkt die Menge an text- und image-Daten ein, die eine einzelne Anweisung abrufen kann. Das Aufrufen von SQLSetStmtAttr, wenn fOption auf SQL_ATTR_MAX_ROWS festgelegt ist, beschränkt außerdem ein Rowset auf die ersten n Zeilen, wenn die Anwendung nicht mehr erfordert. Beachten Sie, dass das Festlegen von SQL_ATTR_MAX_ROWS bewirkt, dass der Treiber eine SET ROWCOUNT-Anweisung an den Server ausgibt. Dies beeinflusst alle Microsoft SQL Server-Anweisungen, einschließlich Trigger und Updates.
Gehen Sie beim Festlegen dieser Optionen vorsichtig vor. Im Idealfall sollten alle Anweisungshandle eines Verbindungshandles die gleichen Einstellungen für SQL_ATTR_MAX_LENGTH und SQL_ATTR_MAX_ROWS aufweisen. Wenn der Treiber von einem Anweisungshandle zu einem anderen mit abweichenden Werten für diese Optionen wechselt, muss der Treiber die entsprechenden SET TEXTSIZE- und SET ROWCOUNT-Anweisungen generieren, um die Einstellungen zu ändern. Der Treiber kann diese Anweisungen nicht dem gleichen Batch zuordnen, in dem sich auch die SQL-Anweisung des Benutzers befindet, da die SQL-Anweisung des Benutzers eine Anweisung enthalten kann, die die erste Anweisung in einem Batch darstellen muss. Der Treiber muss die Anweisungen SET TEXTSIZE und SET ROWCOUNT in einem separaten Batch senden, der automatisch einen zusätzlichen Roundtrip zum Server generiert.