Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere ODBC-API

 

SQL Anywhere-Verbindungsattribute

Der SQL Anywhere ODBC-Treiber unterstützt einige erweiterte Verbindungsattribute.

  • SA_REGISTER_MESSAGE_CALLBACK   Nachrichten können vom Datenbankserver an die Clientanwendung unter Verwendung der SQL MESSAGE-Anweisung gesendet werden. Es kann eine Message-Handler-Routine erstellt werden, um diese Nachrichten abzufangen. Der Message-Handler Callback-Prototyp sieht wie folgt aus:

    void SQL_CALLBACK Message_Handler(
    SQLHDBC sqlany_dbc,
    unsigned char  Nachrichtentyp,
    long Code,
    unsigned short  Länge,
    char * Nachricht
    );

    Die folgenden zulässigen Werte für Nachrichtentyp sind in sqldef.h festgelegt.

    • MESSAGE_TYPE_INFO   Der Nachrichtentyp war INFO.

    • MESSAGE_TYPE_WARNING   Der Nachrichtentyp war WARNING.

    • MESSAGE_TYPE_ACTION   Der Nachrichtentyp war ACTION.

    • MESSAGE_TYPE_STATUS   Der Nachrichtentyp war STATUS.

    Ein SQLCODE, der der Nachricht zugeordnet ist, kann in Code übermittelt werden. Wenn keiner verfügbar ist, ist der Code-Parameterwert 0.

    Die Länge der Nachricht ist in Länge enthalten.

    Ein Zeiger auf die Nachricht ist in Nachricht enthalten. Beachten Sie, dass Nachricht nicht null-terminiert ist. Ihre Anwendung muss in der Lage sein, dies zu verarbeiten. Im Folgenden finden Sie ein Beispiel.

    memcpy( mybuff, msg, len );
    mybuff[ len ] = '\0';

    Um den Message-Handler in ODBC zu registrieren, rufen Sie die Funktion SQLSetConnectAttr folgendermaßen auf:

    rc = SQLSetConnectAttr(
       hdbc,
       SA_REGISTER_MESSAGE_CALLBACK,
       (SQLPOINTER) &message_handler, SQL_IS_POINTER );

    Um die Registrierung des Message-Handlers in ODBC aufzuheben, rufen Sie die Funktion SQLSetConnectAttr folgendermaßen auf:

    rc = SQLSetConnectAttr(
       hdbc,
       SA_REGISTER_MESSAGE_CALLBACK,
       NULL, SQL_IS_POINTER );

  • SA_GET_MESSAGE_CALLBACK_PARM   Um den Wert des SQLHDBC-Verbindungshandles abzufragen, der an die Message-Handler Callback-Routine übergeben wird, verwenden Sie SQLGetConnectAttr mit dem Parameter SA_GET_MESSAGE_CALLBACK_PARM.
    SQLHDBC callback_hdbc = NULL;
    rc = SQLGetConnectAttr( 
       hdbc,
       SA_GET_MESSAGE_CALLBACK_PARM,
       (SQLPOINTER) &callback_hdbc, 0, 0 );

    Der Rückgabewert ist derselbe wie der Parameterwert, der an die Message-Handler Callback-Routine übergeben wird.

  • SA_REGISTER_VALIDATE_FILE_TRANSFER_CALLBACK   Dies wird verwendet, um eine Callback-Funktion zur Dateiübertragungsvalidierung zu registrieren. Bevor er eine Übertragung zulässt, ruft der Treiber die Validierungs-Callback-Funktion auf, falls vorhanden. Falls die Client-Datenübertragung während der Ausführung von indirekten Anweisungen angefordert wird, lässt der ODBC-Treiber die Übertragung nur zu, wenn die Clientanwendung einen Validierungs-Callback registriert hat. Die Bedingungen, unter denen ein Validierungsaufruf durchgeführt wird, werden unten ausführlich beschrieben.

    Der Callback-Prototyp sieht wie folgt aus:

    int SQL_CALLBACK file_transfer_callback(
    void * sqlca,
    char * file_name,
    int is_write
    );

    Der Parameter file_name ist der Name der zu lesenden oder zu schreibenden Datei. Der Parameter is_write ist 0, wenn ein Lesevorgang (Übertragung vom Client zum Datenbankserver) angefordert wird, und Nicht-Null bei einem Schreibvorgang. Die Callback-Funktion sollte 0 zurückgeben, wenn die Übertragung nicht zulässig ist, ansonsten Nicht-Null.

    Aus Gründen der Datensicherheit protokolliert der Datenbankserver den Ursprung von Anweisungen, die eine Dateiübertragung anfordern. Der Datenbankserver ermittelt, ob die Anweisung direkt von der Clientanwendung empfangen wurde. Wenn er die Datenübertragung vom Client initiiert, sendet der Datenbankserver die Informationen über den Ursprung der Anweisung an die Clientsoftware. Seinerseits erlaubt die Embedded SQL Clientbibliothek nur dann eine bedingungslose Übertragung, wenn die Datenübertragung aufgrund der Ausführung einer Anweisung angefordert wird, die direkt von der Clientanwendung gesendet wird. Ansonsten muss die Anwendung den oben beschriebenen Validierungs-Callback registriert haben. Wenn dieser fehlt, wird die Übertragung verweigert und die Anweisung schlägt mit einem Fehler fehl. Beachten Sie: Wenn die Clientanweisung eine bereits in der Datenbank vorhandene gespeicherte Prozedur aufruft, wird die Ausführung der gespeicherten Prozedur selbst nicht als eine vom Client initiierte Anweisung angesehen. Wenn die Clientanwendung allerdings explizit eine temporäre gespeicherte Prozedur erstellt, führt die Ausführung der gespeicherten Prozedur dazu, dass der Datenbankserver die Prozedur als eine vom Client initiierte behandelt. Wenn die Clientanwendung eine Batchanweisung ausführt, wird auf gleiche Weise die Ausführung der Batchanweisung als eine angesehen, die direkt von der Clientanwendung durchgeführt wird.

  • SA_SQL_ATTR_TXN_ISOLATION   Dies wird verwendet, um eine erweiterte Transaktionsisolationsstufe zu setzen. Das folgende Beispiel setzt eine Snapshot-Isolationsstufe:
    SQLAllocHandle( SQL_HANDLE_DBC, env, &dbc );
    SQLSetConnectAttr( dbc, SQL_ATTR_TXN_ISOLATION,
          SA_SQL_TXN_SNAPSHOT, SQL_IS_UINTEGER );

    Weitere Hinweise finden Sie unter Isolationsstufen für ODBC-Transaktionen wählen.