Konvertieren von DB-Library-Programmen zum Massenkopieren in ODBC-Programme
Ein DB-Library-Programm zum Massenkopieren lässt sich einfach in ein entsprechendes ODBC-Programm konvertieren, weil die vom ODBC-Treiber von SQL Server Native Client unterstützten Funktionen zum Massenkopieren mit folgenden Ausnahmen den DB-Library-Funktionen zum Massenkopieren gleichen:
DB-Library-Anwendungen übergeben als ersten Parameter von Funktionen zum Massenkopieren einen Zeiger auf eine DBPROCESS-Struktur. In ODBC-Anwendungen wird der DBPROCESS-Zeiger durch ein ODBC-Verbindungshandle ersetzt.
DB-Library-Anwendungen rufen BCP_SETL auf, bevor sie eine Verbindung herstellen, um Massenkopiervorgänge für eine DBPROCESS-Struktur zu aktivieren. ODBC-Anwendungen rufen stattdessen SQLSetConnectAttr auf, bevor sie eine Verbindung herstellen, um Massenkopiervorgänge für ein Verbindungshandle zu aktivieren:
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (void *)SQL_BCP_ON, SQL_IS_INTEGER);
Der ODBC-Treiber von SQL Server Native Client unterstützt keine DB-Library-Meldungs- und Fehlerbehandlungsroutinen; Sie müssen SQLGetDiagRec aufrufen, um von den ODBC-Massenkopierfunktionen ausgelöste Fehler und Meldungen zu erhalten. Die ODBC-Versionen der Massenkopierfunktionen geben die Standardrückgabecodes SUCCEED bzw. FAILED für das Massenkopieren zurück statt der Rückgabecodes im ODBC-Stil, wie SQL_SUCCESS oder SQL_ERROR.
Die für den DB-Library-Parameter bcp_bindvarlen angegebenen Werte werden anders interpretiert als der ODBC-Parameter bcp_bindcbData.
Angegebene Bedingung
DB-Library-Wert für varlen
ODBC-Wert für cbData
Angabe von NULL-Werten
0
-1 (SQL_NULL_DATA)
Angabe von variablen Daten
-1
-10 (SQL_VARLEN_DATA)
Zeichen oder binäre Zeichenfolge mit der Länge 0
N.V.
0
In einem DB-Library-Programm wird durch den Wert -1 für varlen angegeben, dass Daten mit variabler Länge übergeben werden. Die entsprechende Angabe für den ODBC-Parameter cbData wird dagegen so interpretiert, dass nur NULL-Werte übergeben werden. Ändern Sie alle DB-Library-Angaben für varlen von -1 in SQL_VARLEN_DATA und alle varlen-Werte von 0 in SQL_NULL_DATA.
Beim DB-Library-Parameter bcp_colfmtfile_collen und dem ODBC-Parameter bcp_colfmtcbUserData tritt dasselbe Problem wie bei den oben beschriebenen Parametern bcp_bindvarlen und cbData auf. Ändern Sie gegebenenfalls alle DB-Library-Werte für file_collen von -1 in SQL_VARLEN_DATA und die file_collen-Werte von 0 in SQL_NULL_DATA.
Der iValue-Parameter der ODBC-Funktion bcp_control ist ein void-Zeiger. In der DB-Library-Funktion ist iValue eine ganze Zahl. Wandeln Sie die Werte für den ODBC-Parameter iValue in void * um.
Die bcp_control-Option BCPMAXERRS legt fest, wie viele Zeilen Fehler enthalten können, bevor ein Massenkopiervorgang fehlschlägt. In der DB-Library-Version von bcp_control lautet der Standardwert von BCPMAXERRS 0 (Fehlschlagen beim ersten Fehler), und in der ODBC-Version lautet er 10. DB-Library-Anwendungen, in denen der Standardwert 0 zur Beendigung eines Massenkopiervorgangs vorausgesetzt wird, müssen abgeändert werden, sodass die ODBC-Funktion bcp_control aufgerufen und BCPMAXERRS auf 0 festgelegt wird.
Die ODBC-Funktion bcp_control unterstützt die folgenden von der DB-Library-Version von bcp_control nicht unterstützten Optionen:
BCPODBC
Durch die Festlegung dieser Option auf TRUE wird angegeben, dass für die im Zeichenformat gespeicherten Werte datetime und smalldatetime das Präfix- und das Suffixzeichen der Escapesequenz für die ODBC-Timestamp-Daten verwendet werden. Dies gilt nur für BCP_OUT-Vorgänge.
Wenn BCPODBC auf FALSE festgelegt wurde, wird ein in eine Zeichenfolge konvertierter datetime-Wert wie folgt ausgegeben:
1997-01-01 00:00:00.000
Wenn BCPODBC auf TRUE festgelegt wurde, wird der gleiche datetime-Wert wie folgt ausgegeben:
{ts '1997-01-01 00:00:00.000' }
BCPKEEPIDENTITY
Durch die Festlegung dieser Option auf TRUE wird angegeben, dass Massenkopierfunktionen Datenwerte einfügen, die für Spalten mit IDENTITY-Einschränkungen bereitgestellt werden. Wenn dies nicht festgelegt ist, werden neue Identitätswerte für die eingefügten Zeilen generiert.
BCPHINTS
Gibt verschiedene Optimierungen für das Massenkopieren an. Diese Option kann in Version 6.5 und früheren Versionen von SQL Server nicht verwendet werden.
BCPFILECP
Gibt die Codepage für die Datendatei des Massenkopiervorgangs an.
BCPUNICODEFILE
Gibt an, dass eine Datendatei für das Massenkopieren im Zeichenmodus eine Unicode-Datei ist.
Die ODBC-Funktion bcp_colfmt unterstützt den file_type-Indikator des SQLCHAR-Typs nicht, weil dieser mit der ODBC-Typdefinition für SQLCHAR in Konflikt steht. Verwenden Sie stattdessen SQLCHARACTER für bcp_colfmt.
In den ODBC-Versionen der Funktionen zum Massenkopieren können datetime-Werte und smalldatetime-Werte in Zeichenfolgen im ODBC-Format yyyy-mm-dd hh:mm:ss.sss verarbeitet werden; für smalldatetime-Werte wird das ODBC-Format yyyy-mm-dd hh:mm:ss verwendet.
Die DB-Library-Versionen der Funktionen zum Massenkopieren akzeptieren datetime-Werte und smalldatetime-Werte in Zeichenfolgen in verschiedenen Formaten:
Das Standardformat lautet mmm dd yyyy hh:mmxx, wobei xx für AM (vormittags) oder PM (nachmittags).
datetime und smalldatetime-Zeichenfolgen in einem beliebigen von der DB-Library-Funktion dbconvert unterstützten Format
Wenn das Kontrollkästchen Internationale Einstellungen verwenden auf der Registerkarte Optionen für die DB-Library in der SQL Server-Clientkonfiguration von SQL Server aktiviert wurde, dann akzeptieren die DB-Library-Funktionen zum Massenkopieren auch Datumsangaben in dem regionalen Datumsformat, das für die Einstellung des Gebietsschemas in der Registrierung des Clientcomputers definiert wurde.
Die DB-Library-Funktionen zum Massenkopieren akzeptieren nicht die ODBC-Formate datetime und smalldatetime.
Wenn das SQL_SOPT_SS_REGIONALIZE-Anweisungsattribut auf SQL_RE_ON festgelegt wurde, akzeptieren die ODBC-Funktionen zum Massenkopieren auch Datumsangaben in dem regionalen Datumsformat, das für die Einstellung des Gebietsschemas in der Registrierung des Clientcomputers definiert wurde.
Bei der Ausgabe von money-Werten im Zeichenformat, stellen ODBC-Funktionen zum Massenkopieren vier Dezimalstellen und keine Trennzeichen für Tausenderstellen zur Verfügung. Die DB-Library-Versionen stellen nur zwei Kommastellen und die Trennzeichen für Tausenderstellen zur Verfügung.