Freigeben über


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.