Share via


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

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Das Konvertieren eines DB-Library Massenkopierprogramms in ODBC ist einfach, da die vom SQL Server Native Client ODBC-Treiber unterstützten Massenkopierfunktionen den DB-Library Massenkopierfunktionen ä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 vor der Verbindung BCP_SETL auf, um Massenkopiervorgänge für einen DBPROCESS zu aktivieren. ODBC-Anwendungen rufen stattdessen SQLSetConnectAttr auf, bevor sie eine Verbindung herstellen, um Massenvorgänge für ein 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 Nachrichten- und Fehlerhandler. Sie müssen SQLGetDiagRec aufrufen, um Fehler und Meldungen abzurufen, die von den ODBC-Massenkopierfunktionen 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 DB-Library bcp_bindvarlen-Parameter angegebenen Werte werden anders interpretiert als der ODBC-bcp_bindcbData-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 der varlen-Wert -1 an, dass Daten mit variabler Länge bereitgestellt werden, was in der ODBC cbData so interpretiert wird, dass nur NULL-Werte bereitgestellt werden. Ändern Sie alle DB-Library varlen-Spezifikationen von -1 in SQL_VARLEN_DATA und alle varlen-Spezifikationen von 0 in SQL_NULL_DATA.

  • Die DB-Library bcp_colfmtfile_collen und die ODBC-bcp_colfmtcbUserData haben das gleiche Problem wie die oben erwähnten 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 void-Zeiger. In DB-Library war iValue eine ganze Zahl. Wandeln Sie die Werte für odbc iValue in void * um.

  • Die bcp_control Option BCPMAXERRS gibt an, wie viele einzelne Zeilen Fehler aufweisen können, bevor ein Massenkopiervorgang 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 Standardwert 0 abhängen, um einen Massenkopiervorgang zu beenden, müssen so geändert werden, dass die ODBC-bcp_control aufgerufen wird, 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

      Gibt bei Festlegung auf TRUE an, dass datetime - und smalldatetime-Werte , die im Zeichenformat gespeichert werden, das ODBC-Timestamp-Escapesequenzpräfix und -Suffix aufweisen. Dies gilt nur für BCP_OUT-Vorgänge.

      Wenn BCPODBC auf FALSE festgelegt ist, wird ein in eine Zeichenfolge konvertierter datetime-Wert wie folgt ausgegeben:

      1997-01-01 00:00:00.000  
      

      Wenn BCPODBC auf TRUE festgelegt ist, wird derselbe 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 Version 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 er mit dem ODBC SQLCHAR-Typdef in Konflikt steht. Verwenden Sie stattdessen SQLCHARACTER für bcp_colfmt.

  • In den ODBC-Versionen von Massenkopierfunktionen ist das Format für die Arbeit mit datetime - und smalldatetime-Werten in Zeichenfolgen das ODBC-Format yyyy-mm-ttd hh:mm:ssss; smalldatetime-Werte verwenden das ODBC-Format yyyy-mm-tt hh:mm:ss.

    Die DB-Library Versionen der Massenkopierfunktionen akzeptieren datetime- und smalldatetime-Werte in Zeichenfolgen in verschiedenen 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 Clientnetzwerk-Hilfsprogramms aktiviert ist, akzeptieren die DB-Library Massenkopierfunktionen auch Datumsangaben im regionalen Datumsformat, das für die Gebietsschemaeinstellung der Clientcomputerregistrierung definiert ist.

    Die DB-Library Massenkopierfunktionen 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.

  • Bei der Ausgabe von Geldwerten im Zeichenformat liefern ODBC-Massenkopierfunktionen vier Ziffern der Genauigkeit und keine Kommatrennzeichen. DB-Library Versionen bieten nur zwei Ziffern der Genauigkeit und enthalten die Kommatrennzeichen.

Weitere Informationen

Durchführen von Massenkopiervorgängen (ODBC)
Bulk Copy Functions