Teilen über


Konvertieren von DB-Library-Programmen zum Massenkopieren in ODBC-Programme

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics Analytics Platform System (PDW)

Das Konvertieren eines Massenkopieprogramms von DB-Library in ODBC ist einfach, da die vom SQL Server Native Client ODBC-Treiber unterstützten Massenkopiefunktionen den Massenkopiefunktionen der DB-Library ähneln, mit den folgenden Ausnahmen:

  • 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 Massenkopievorgänge in einem DBPROCESS zu aktivieren. ODBC-Anwendungen rufen stattdessen SQLSetConnectAttr auf, bevor Sie eine Verbindung herstellen, um Massenvorgänge in einem Verbindungshandle zu aktivieren:

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,  
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);  
    
  • Der SQL Server Native Client ODBC-Treiber unterstützt keine DB-Library-Meldungs- und Fehlerhandler; Sie müssen SQLGetDiagRec aufrufen, um Fehler und Nachrichten abzurufen, die von den ODBC-Massenkopiefunktionen ausgelöst werden. 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 PARAMETER DB-Library bcp_bindvarlen angegebenen Werte werden anders interpretiert als der ODBC-bcp_bind cbData-Parameter.

    Angegebene Bedingung DB-Library varlen-Wert ODBC cbData-Wert
    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 Nicht verfügbar 0

    In DB-Library gibt ein Varlenwert von -1 an, dass Daten mit variabler Länge angegeben werden, die in ODBC cbData interpretiert werden, sodass nur NULL-Werte bereitgestellt werden. Ändern Sie alle Varlenspezifikationen der DB-Library von -1 in SQL_VARLEN_DATA und alle Varlen-Spezifikationen von 0 in SQL_NULL_DATA.

  • Die DB-Library-bcp_colfmt file_collen und das ODBC-bcp_colfmt cbUserData haben das gleiche Problem wie die oben aufgeführten parameter bcp_bindvarlen und cbData. Ändern Sie alle DB-Library-file_collen Spezifikationen von -1 in SQL_VARLEN_DATA und alle file_collen Spezifikationen von 0 in SQL_NULL_DATA.

  • Der iValue-Parameter der ODBC-bcp_control-Funktion ist ein leerer Zeiger. In db-Library war iValue eine ganze Zahl. Wandeln Sie die Werte für den ODBC-iValue in "void *" um.

  • Die option bcp_control BCPMAXERRS gibt an, wie viele einzelne Zeilen Fehler aufweisen können, bevor ein Massenkopievorgang fehlschlägt. Der Standardwert für BCPMAXERRS ist 0 (Fehler beim ersten Fehler) in der DB-Library-Version von bcp_control und 10 in der ODBC-Version. DB-Library-Anwendungen, die vom Standard von 0 zum Beenden eines Massenkopievorgangs abhängen, müssen geändert werden, um die ODBC-bcp_control aufzurufen, um BCPMAXERRS auf 0 festzulegen.

  • Die ODBC-bcp_control-Funktion unterstützt die folgenden Optionen, die von der DB-Library-Version von bcp_control nicht unterstützt werden:

    • BCPODBC

      Wenn dieser Wert auf TRUE festgelegt ist, gibt es an, dass datums- und smalldatetime-Werte , die im Zeichenformat gespeichert sind, das Präfix und suffix der ODBC-Zeitstempel-Escapesequenz aufweisen. Dies gilt nur für BCP_OUT-Vorgänge.

      Wenn BCPODBC auf FALSE festgelegt ist, wird ein datumstime-Wert , der in eine Zeichenfolge konvertiert wird, ausgegeben als:

      1997-01-01 00:00:00.000  
      

      Wenn BCPODBC auf TRUE festgelegt ist, wird der gleiche Datetime-Wert ausgegeben wie:

      {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 einer IDENTITY-Einschränkung 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 nicht in 6.5 oder früheren Versionen von SQL Server 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-bcp_colfmt-Funktion unterstützt den file_type Indikator von SQLCHAR nicht, da sie mit dem ODBC SQLCHAR-Typdef in Konflikt steht. Verwenden Sie stattdessen SQLCHARACTER für bcp_colfmt.

  • In den ODBC-Versionen von Massenkopienfunktionen ist das Format für das Arbeiten mit Datums- und Kleindaten in Zeichenzeichenfolgen das ODBC-Format von yyyy-mm-dd hh:mm:ss.sss; Smalldatetime-Werte verwenden das ODBC-Format von yyyy-mm-dd hh:mm:ss.

    Die DB-Library-Versionen der Massenkopiefunktionen akzeptieren Datetime - und Smalldatetime-Werte in Zeichenfolgen mit mehreren Formaten:

    • Das Standardformat ist mmm dd yyyy hh:mmxx , wobei xx entweder AM oder PM ist.

    • datetime- und smalldatetime-Zeichenfolgen in einem beliebigen Format, das von der DB-Library-Dbconvert-Funktion unterstützt wird.

    • Wenn das Kontrollkästchen "Internationale Einstellungen verwenden" auf der Registerkarte "DB-Library-Optionen" des SQL Server Client Network Utility aktiviert ist, akzeptieren die Massenkopiefunktionen der DB-Bibliothek auch Datumsangaben im regionalen Datumsformat, das für die Gebietsschemaeinstellung der Clientcomputerregistrierung definiert ist.

    Die Massenkopiefunktionen der DB-Library akzeptieren die ODBC-Formate "datetime " und "smalldatetime " nicht.

    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.

  • Beim Ausgeben von Geldwerten im Zeichenformat liefern ODBC-Massenkopiefunktionen vier Ziffern Genauigkeit und keine Kommatrennzeichen; DB-Library-Versionen liefern nur zwei Ziffern Genauigkeit und enthalten die Kommatrennzeichen.

Weitere Informationen

Durchführen von Massenkopiervorgängen (ODBC)
Massenkopierfunktionen