SQLSetStmtAttr
Der SQL Server Native Client ODBC-Treiber unterstützt das gemischte Cursormodell (Keyset/Dynamic). Der Versuch, die Keysetgröße mit SQL_ATTR_KEYSET_SIZE festzulegen, schlägt fehl, wenn der festgelegte Wert ungleich 0 (null) ist.
Die Anwendung legt SQL_ATTR_ROW_ARRAY_SIZE für alle Anweisungen fest, um die Anzahl der Zeilen zu deklarieren, die für einen SQLFetch - oder SQLFetchScroll-Funktionsaufruf zurückgegeben werden. Bei Anweisungen, die einen Servercursor angeben, verwendet der Treiber SQL_ATTR_ROW_ARRAY_SIZE, um die Größe des Zeilenblocks zu ermitteln, der vom Server als Reaktion auf eine Abrufanforderung des Cursors generiert wird. Innerhalb der Blockgröße eines dynamischen Cursors sind die Zeilenmitgliedschaft und -reihenfolge festgelegt, wenn die Isolationsstufe der Transaktion ausreichend ist, um wiederholbare Lesevorgänge von Transaktionen sicherzustellen, für die ein Commit ausgeführt wurde. Der Cursor ist außerhalb des von diesem Wert angegebenen Blocks vollkommen dynamisch. Die Blockgröße des Servercursors ist vollkommen dynamisch und kann zu jedem Zeitpunkt während der Abrufverarbeitung geändert werden.
'SQLSetStmtAttr' und Tabellenwertparameter
SQLSetStmtAttr kann verwendet werden, um SQL_SOPT_SS_PARAM_FOCUS im Anwendungsparameterdeskriptor (APD) festzulegen, bevor auf Deskriptorfelder für Tabellenwertparameterspalten zugegriffen wird.
Wenn versucht wird, SQL_SOPT_SS_PARAM_FOCUS auf die Ordnungszahl eines Parameters festzulegen, der kein Tabellenwertparameter ist, gibt SQLSetStmtAttr SQL_ERROR zurück, und ein Diagnosedatensatz wird mit SQLSTATE = HY024 und der Meldung "Ungültiger Attributwert" erstellt. SQL_SOPT_SS_PARAM_FOCUS wird nicht geändert, wenn SQL_ERROR zurückgegeben wird.
Durch das Festlegen von SQL_SOPT_SS_PARAM_FOCUS auf 0 (null) wird der Zugriff auf Deskriptordatensätze für Parameter wiederhergestellt.
SQLSetStmtAttr kann auch verwendet werden, um SQL_SOPT_SS_NAME_SCOPE festzulegen. Weitere Informationen finden Sie im Abschnitt zu SQL_SOPT_SS_NAME_SCOPE weiter unten in diesem Thema.
Weitere Informationen finden Sie unter Tabellenwertparametermetadaten für vorbereitete Anweisungen.
Weitere Informationen zu Tabellenwertparametern finden Sie unter Tabellenwertparameter (ODBC).
Unterstützung von 'SQLSetStmtAttr' für Spalten mit geringer Dichte
SQLSetStmtAttr kann verwendet werden, um SQL_SOPT_SS_NAME_SCOPE festzulegen. Weitere Informationen finden Sie weiter unten in diesem Thema im Abschnitt SQL_SOPT_SS_NAME_SCOPE. Weitere Informationen zu Sparsespalten finden Sie unter Unterstützung von Sparsespalten (ODBC).
Anweisungsattribute
Der SQL Server Native Client ODBC-Treiber unterstützt auch die folgenden treiberspezifischen Anweisungsattribute.
SQL_SOPT_SS_CURSOR_OPTIONS
Das SQL_SOPT_SS_CURSOR-Attribut gibt an, ob der Treiber treiberspezifische Leistungsoptionen für Cursor verwendet. SQLGetData ist nicht zulässig, wenn diese Optionen festgelegt sind. Die Standardeinstellung ist SQL_CO_OFF. Der ValuePtr -Wert ist vom Typ SQLLEN.
ValuePtr-Wert | BESCHREIBUNG |
---|---|
SQL_CO_OFF | Standard. Deaktiviert schnelle vorwärtsgeschützte, schreibgeschützte Cursor und autofetch, aktiviert SQLGetData für vorwärtsgeschützte, schreibgeschützte Cursor. Wenn SQL_SOPT_SS_CURSOR_OPTIONS auf SQL_CO_OFF festgelegt ist, ändert sich der Cursortyp nicht. Das heißt, ein schneller Vorwärtscursor bleibt ein schneller Vorwärtscursor. Um den Cursortyp zu ändern, muss die Anwendung nun einen anderen Cursortyp mit SQLSetStmtAttr /SQL_ATTR_CURSOR_TYPE festlegen. |
SQL_CO_FFO | Aktiviert schnelle vorwärtsgeschützte, schreibgeschützte Cursor und deaktiviert SQLGetData auf vorwärtsgeschützten, schreibgeschützten Cursorn. |
SQL_CO_AF | Aktiviert die automatische Abrufoption für jeden Cursortyp. Wenn diese Option für ein Anweisungshandle festgelegt ist, generiert SQLExecute oder SQLExecDirect einen impliziten SQLFetchScroll (SQL_FIRST). Der Cursor wird geöffnet, und der erste Batch Zeilen wird mit einem einzigen Roundtrip an den Server zurückgegeben. |
SQL_CO_FFO_AF | Aktiviert schnelle Vorwärtscursor mit der automatischen Abrufoption. Das entspricht der gleichzeitigen Angabe von SQL_CO_AF und SQL_CO_FFO. |
Wenn diese Optionen festgelegt sind, schließt der Server den Cursor automatisch, wenn er erkennt, dass die letzte Zeile abgerufen wurde. Die Anwendung muss weiterhin SQLFreeStmt (SQL_CLOSE) oder SQLCloseCursor aufrufen, aber der Treiber muss die Benachrichtigung zum Schließen nicht an den Server senden.
Wenn die Auswahlliste eine Text-, ntext- oder Bildspalte enthält, wird der nur schnelle Cursor in einen dynamischen Cursor konvertiert, und SQLGetData ist zulässig.
SQL_SOPT_SS_DEFER_PREPARE
Das SQL_SOPT_SS_DEFER_PREPARE-Attribut bestimmt, ob die Anweisung sofort vorbereitet oder zurückgestellt wird, bis SQLExecute, SQLDescribeCol oder SQLDescribeParam ausgeführt wird. In SQL Server Version 7.0 und früher wird diese Eigenschaft ignoriert (keine verzögerte Vorbereitung). Der ValuePtr -Wert ist vom Typ SQLLEN.
ValuePtr-Wert | BESCHREIBUNG |
---|---|
SQL_DP_ON | Standard. Nach dem Aufrufen der SQLPrepare-Funktion wird die Anweisungsvorbereitung zurückgestellt, bis SQLExecute aufgerufen oder der Metaproperty-Vorgang (SQLDescribeCol oder SQLDescribeParam) ausgeführt wird. |
SQL_DP_OFF | Die Anweisung wird vorbereitet, sobald SQLPrepare ausgeführt wird. |
SQL_SOPT_SS_REGIONALIZE
Das SQL_SOPT_SS_REGIONALIZE-Attribut wird verwendet, um die Datenkonvertierung auf Anweisungsebene zu bestimmen. Das Attribut bewirkt, dass der Treiber bei der Konvertierung von Datums-, Uhrzeit- und Währungswerten in Zeichenfolgen die Gebietsschemaeinstellung des Clients beachtet. Die Konvertierung erfolgt aus SQL Server nativen Datentypen nur in Zeichenfolgen.
Der ValuePtr -Wert ist vom Typ SQLLEN.
ValuePtr-Wert | BESCHREIBUNG |
---|---|
SQL_RE_OFF | Standard. Der Treiber konvertiert Datums-, Uhrzeit- und Währungsdaten nicht gemäß der Gebietsschemaeinstellung des Clients in Zeichenfolgendaten. |
SQL_RE_ON | Der Treiber konvertiert Datums-, Uhrzeit- und Währungsdaten gemäß der Gebietsschemaeinstellung des Clients in Zeichenfolgendaten. |
Regionale Konvertierungseinstellungen gelten für Währungs-, Zahlen-, Datums- und Uhrzeitdatentypen. Die Konvertierungseinstellungen gelten nur für Ausgabekonvertierungen, wenn Währungs-, Zahlen-, Datums- oder Uhrzeitwerte in Zeichenfolgen konvertiert werden.
Hinweis
Wenn die SQL_SOPT_SS_REGIONALIZE-Anweisungsoption aktiviert ist, verwendet der Treiber die lokalen Registrierungseinstellungen für den aktuellen Benutzer. Der Treiber berücksichtigt das Gebietsschema des aktuellen Threads nicht, wenn es von der Anwendung festgelegt wird, z. B. durch Aufrufen von SetThreadLocale.
Das Verändern des regionalen Verhaltens einer Datenquelle kann Anwendungsfehler verursachen. Eine Anwendung, die Datumszeichenfolgen analysiert und erwartet, dass sie der ODBC-Definition entsprechen, wird durch die Änderung dieses Werts möglicherweise beeinträchtigt.
SQL_SOPT_SS_TEXTPTR_LOGGING
Das SQL_SOPT_SS_TEXTPTR_LOGGING-Attribut schaltet die Protokollierung von Vorgängen für Spalten um, die Text - oder Bilddaten enthalten. Der ValuePtr -Wert ist vom Typ SQLLEN.
ValuePtr-Wert | BESCHREIBUNG |
---|---|
SQL_TL_OFF | Deaktiviert die Protokollierung von Vorgängen, die für Text - und Bilddaten ausgeführt werden. |
SQL_TL_ON | Standard. Ermöglicht die Protokollierung von Vorgängen, die für Text - und Bilddaten ausgeführt werden. |
SQL_SOPT_SS_HIDDEN_COLUMNS
Das SQL_SOPT_SS_HIDDEN_COLUMNS-Attribut macht im Resultset Spalten verfügbar, die in einer SQL Server SELECT FOR BROWSE-Anweisung ausgeblendet sind. Der Treiber macht diese Spalten standardmäßig nicht verfügbar. Der ValuePtr -Wert ist vom Typ SQLLEN.
ValuePtr-Wert | BESCHREIBUNG |
---|---|
SQL_HC_OFF | Standard. FOR BROWSE-Spalten werden aus dem Resultset ausgeblendet. |
SQL_HC_ON | Macht FOR BROWSE-Spalten verfügbar. |
SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT
Das SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT-Attribut gibt den Meldungstext für die Abfragebenachrichtigungsanforderung zurück.
SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS
Das SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS-Attribut gibt die Optionen an, die für die Abfragebenachrichtigungsanforderung verwendet werden. Diese werden in einer Zeichenfolge mit der Syntax name=value
angegeben (siehe Code weiter unten). Die Anwendung ist für das Erstellen des Diensts und Lesen von Benachrichtigungen von der Warteschlange verantwortlich.
Die Syntax der Zeichenfolge für die Abfragebenachrichtigungsoptionen lautet:
service=<service-name>[;(local database=<database>|broker instance=<broker instance>)]
Beispiel:
service=mySSBService;local database=mydb
SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT
Das SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT-Attribut gibt die Dauer (in Sekunden) an, für die die Abfragebenachrichtigung aktiv bleiben soll. Der Standardwert lautet 432.000 Sekunden (5 Tage). Der ValuePtr -Wert ist vom Typ SQLLEN.
SQL_SOPT_SS_PARAM_FOCUS
Das attribut SQL_SOPT_SS_PARAM_FOCUS gibt den Fokus für nachfolgende SQLBindParameter-, SQLGetDescField-, SQLSetDescField-, SQLGetDescRec- und SQLSetDescRec-Aufrufe an.
Der Typ für SQL_SOPT_SS_PARAM_FOCUS lautet SQLULEN.
Der Standardwert ist 0 (null). Das bedeutet, dass diese Aufrufe sich an Parameter richten, die Parametermarkierungen in der SQL-Anweisung entsprechen. Wenn diese Aufrufe auf die Parameternummer eines Tabellenwertparameters festgelegt sind, adressieren sie Spalten dieses Tabellenwertparameters. Wenn sie auf einen anderen Wert als die Parameternummer eines Tabellenwertparameters festgelegt sind, geben diese Aufrufe den Fehler IM020 zurück: "Parameterfokus verweist nicht auf einen Tabellenwertparameter."
SQL_SOPT_SS_NAME_SCOPE
Das SQL_SOPT_SS_NAME_SCOPE-Attribut gibt den Namensbereich für nachfolgende Katalogfunktionsaufrufe an. Das von SQLColumns zurückgegebene Resultset hängt von der Einstellung von SQL_SOPT_SS_NAME_SCOPE ab.
Der Typ für SQL_SOPT_SS_NAME_SCOPE lautet SQLULEN.
ValuePtr-Wert | BESCHREIBUNG |
---|---|
SQL_SS_NAME_SCOPE_TABLE | Standard. Gibt bei Verwendung von Tabellenwertparametern an, dass Metadaten für tatsächliche Tabellen zurückgegeben werden sollen. Bei Verwendung des Features für Sparsespalten gibt SQLColumns nur Spalten zurück, die keine Member der Sparse column_set sind. |
SQL_SS_NAME_SCOPE_TABLE_TYPE | Gibt an, dass die Anwendung Metadaten für einen Tabellentyp anstatt einer tatsächlichen Tabelle erfordert (Katalogfunktionen sollten Metadaten für Tabellentypen zurückgeben). Die Anwendung übergibt dann den TYPE_NAME des Tabellenwertparameters als TableName-Parameter . |
SQL_SS_NAME_SCOPE_EXTENDED | Bei Verwendung des Features "Sparsespalten" gibt SQLColumns alle Spalten zurück, unabhängig von der column_set Mitgliedschaft. |
SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET | Bei Verwendung des Features für Sparsespalten gibt SQLColumns nur Spalten zurück, die Member der Sparse column_set sind. |
SQL_SS_NAME_SCOPE_DEFAULT | Identisch mit SQL_SS_NAME_SCOPE_TABLE |
SS_TYPE_CATALOG_NAME und SS_TYPE_SCHEMA_NAME werden mit den Parametern CatalogName bzw . SchemaName verwendet, um den Katalog und das Schema für den Tabellenwertparameter zu identifizieren. Wenn eine Anwendung das Abrufen von Metadaten für Tabellenwertparameter abgeschlossen hat, muss sie SQL_SOPT_SS_NAME_SCOPE wieder auf den Standardwert SQL_SS_NAME_SCOPE_TABLE festlegen.
Wenn SQL_SOPT_SS_NAME_SCOPE auf SQL_SS_NAME_SCOPE_TABLE festgelegt ist, schlagen Abfragen von Verbindungsservern fehl. Aufrufe von SQLColumns oder SQLPrimaryKeys mit einem Katalog, der eine Serverkomponente enthält, schlagen fehl.
Wenn Sie versuchen, SQL_SOPT_SS_NAME_SCOPE auf einen ungültigen Wert festzulegen, wird SQL_ERROR zurückgegeben. Zudem wird ein Diagnosedatensatz mit SQLSTATE HY024 und der Meldung "Ungültiger Attributwert" generiert.
Wenn eine andere Katalogfunktion als SQLTables, SQLColumns oder SQLPrimaryKeys aufgerufen wird, wenn SQL_SOPT_SS_NAME_SCOPE einen anderen Wert als SQL_SS_NAME_SCOPE_TABLE hat, wird SQL_ERROR zurückgegeben. Ein Diagnosedatensatz mit SQLSTATE HY010 und der Meldung "Fehler in der Funktionsreihenfolge (SQL_SOPT_SS_NAME_SCOPE ist nicht auf SQL_SS_NAME_SCOPE_TABLE festgelegt)" wird generiert.