Anfang des Inhaltsbereichs

 Arbeiten mit UNICODE-Daten 

Verwendung

Der C/C++-Precompiler unterstützt die Verwendung von UNICODE-Daten in MaxDB-Anwendungsprogrammen. Als Kodierungsformat ist dabei ausschließlich UCS2 oder UTF-16 ohne Surrogate – jeweils in der plattformspezifischen Byteanordnung – zulässig. Sämtliche Ausgaben in der Trace-Datei erfolgen in UTF 8.

UNICODE-Zeichenketten können Sie nur in Host-Variablen an folgenden Stellen verwenden:

Sie können UNICODE-Anwendungsprogramme nicht mit ASCII-Datenbankinstanzen verwenden.

Voraussetzung

Sie haben eine UNICODE-fähige Datenbankinstanz installiert.

Nach dem Ausführen der CONNECT-Anweisung erkennt der Precompiler automatisch, ob er mit einer UNICODE-fähigen Datenbankinstanz verbunden ist.

Vorgehensweise

·       Verwenden Sie für Ihre UNICODE-Zeichenketten geeignete Host-Variablen mit den entsprechenden vordefinierten UNICODE-Datentypen.

·       Wenn der Benutzername oder das Kennwort UNICODE-Zeichen enthält, dann verwenden Sie hierfür ebenfalls UNICODE-Host-Variablen.

·       Wenn Host-Variablen komplette SQL-Anweisungen enthalten, dann werden diese Anweisungen abhängig vom Typ der Host-Variablen als ASCII- oder UNICODE-Zeichenkette zur Datenbankinstanz gesendet. Aus Performance-Gründen sollten Sie daher für eine SQL-Anweisung nur dann UNICODE-Host-Variablen verwenden, wenn die Anweisung tatsächlich UNICODE-Zeichen enthält.

·       Führen Sie den Precompiler-Lauf mit der Precompiler-Option –G unicodedurch.

 

EXEC SQL BEGIN DECLARE SECTION;

/* "SELECT TABLENAME FROM DOMAIN.TABLES " encoded in UCS2 */

SQLUCS2 sqlstmt[36] = {0x0053, 0x0045, 0x004C, 0x0045, 0x0043,

0x0054, 0x0020, 0x0054, 0x0041, 0x0042,

0x004C, 0x0045, 0x004E, 0x0041, 0x004D,

0x0045, 0x0020, 0x0046, 0x0052, 0x004F,

0x004D, 0x0020, 0x0044, 0x004F, 0x004D,

0x0041, 0x0049, 0x004E, 0x002E, 0x0054,

0x0041, 0x0042, 0x004C, 0x0045, 0x0053,

0x0000};

SQLUCS2 resultstring[64];

EXEC SQL END DECLARE SECTION;

/* connect ... */

/* parse a unicode sql command and give it a statement name */

EXEC SQL PREPARE stmt1 FROM :sqlstmt;

EXEC SQL DECLARE curs1 CURSOR FOR stmt1;

EXEC SQL OPEN curs1;

/* loop over resultset */

while (sqlca.sqlcode != 100)

{

EXEC SQL FETCH curs1 INTO :resultstring;

/* ... */

}

EXEC SQL CLOSE curs1;

Ende des Inhaltsbereichs