Condividi tramite


Conversione della copia bulk da DB-Library a ODBC

La conversione di un programma per la copia bulk DB-Library in ODBC è facile, in quanto le funzioni di copia bulk supportate dal driver ODBC di SQL Server Native Client sono simili a quelle della copia bulk DB-Library, con le eccezioni seguenti:

  • Nelle applicazioni DB-Library un puntatore a una struttura DBPROCESS viene passato come primo parametro delle funzioni di copia bulk. Nelle applicazioni ODBC il puntatore DBPROCESS viene sostituito da un handle di connessione ODBC.

  • Nelle applicazioni DB-Library viene chiamato BCP_SETL prima della connessione per abilitare le operazioni di copia bulk su una struttura DBPROCESS. Nelle applicazioni ODBC viene invece chiamato SQLSetConnectAttr prima della connessione per abilitare le operazioni bulk su un handle di connessione:

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);
    
  • Il driver ODBC di SQL Server Native Client non supporta i gestori di messaggi ed errori. Per ottenere i messaggi e gli errori generati dalle funzioni di copia bulk ODBC, è pertanto necessario chiamare SQLGetDiagRec. Le versioni ODBC delle funzioni di copia bulk restituiscono i codici restituiti standard di copia bulk SUCCEED o FAILED, non codici restituiti di tipo ODBC, come SQL_SUCCESS o SQL_ERROR.

  • I valori specificati per il parametro bcp_bindvarlen di DB-Library vengono interpretati in modo diverso rispetto al parametro bcp_bindcbData di ODBC.

    Condizione indicata

    Valore varlen di DB-Library

    Valore cbData di ODBC

    Valori Null forniti

    0

    -1 (SQL_NULL_DATA)

    Dati variabili forniti

    -1

    -10 (SQL_VARLEN_DATA)

    Carattere di lunghezza zero o stringa binaria

    ND

    0

    In DB-Library il valore 1 per varlen indica che vengono forniti dati di lunghezza variabile. In ODBC cbData questa situazione indica che vengono forniti solo valori NULL. Modificare i valori -1 specificati per varlen di DB-Library in SQL_VARLEN_DATA e i valori 0 specificati per varlen in SQL_NULL_DATA.

  • bcp_colfmtfile_collen di DB-Library e bcp_colfmtcbUserData di ODBC presentano lo stesso problema dei parametri bcp_bindvarlen e cbData sopra indicati. Modificare i valori -1 specificati per file_collen di DB-Library in SQL_VARLEN_DATA e i valori 0 specificati per file_collen in SQL_NULL_DATA.

  • Il parametro iValue della funzione bcp_control di ODBC è un puntatore a void. In DB-Library iValue è un numero intero. Eseguire il cast dei valori per iValue di ODBC su void *.

  • L'opzione bcp_control BCPMAXERRS specifica il numero di righe singole con errori che deve essere raggiunto perché un'operazione di copia bulk venga compromessa. L'impostazione predefinita per BCPMAXERRS è 0 (l'operazione non riesce al primo errore) nella versione DB-Library di bcp_control e 10 nella versione ODBC. Le applicazioni DB-Library che dipendono dall'impostazione predefinita 0 per terminare un'operazione di copia bulk devono essere modificate in modo che venga chiamato bcp_control di ODBC per impostare su 0 BCPMAXERRS.

  • La funzione bcp_control di ODBC supporta le opzioni seguenti non supportate dalla versione DB-Library di bcp_control:

    • BCPODBC

      Quando è impostato su TRUE, specifica che i valori datetime e smalldatetime salvati in formato carattere presenteranno il prefisso e il suffisso della sequenza di escape del timestamp ODBC. Si applica solo alle operazioni BCP_OUT.

      Se BCPODBC è impostato su FALSE, un valore datetime convertito in una stringa di caratteri viene restituito come:

      1997-01-01 00:00:00.000
      

      Se BCPODBC è impostato su TRUE, lo stesso valore datetime viene restituito come:

      {ts '1997-01-01 00:00:00.000' }
      
    • BCPKEEPIDENTITY

      Quando è impostato su TRUE, specifica che le funzioni di copia bulk inseriscono i valori dei dati forniti per le colonne con vincoli di identità. Se non è impostato, per le righe inserite vengono generati nuovi valori Identity.

    • BCPHINTS

      Specifica le varie ottimizzazioni della copia bulk. Questa opzione non può essere utilizzata nella versione 6.5 o nelle versioni precedenti di SQL Server.

    • BCPFILECP

      Specifica la tabella codici del file di copia bulk.

    • BCPUNICODEFILE

      Specifica che un file di copia bulk in modalità carattere è un file Unicode.

  • La funzione di bcp_colfmt di ODBC non supporta l'indicatore file_type di SQLCHAR, in quanto crea conflitti con il typedef di ODBC SQLCHAR. Utilizzare invece SQLCHARACTER per bcp_colfmt.

  • Nelle versioni ODBC delle funzioni di copia bulk il formato per l'utilizzo dei valori datetime e smalldatetime nelle stringhe di caratteri è il formato ODBC yyyy-mm-dd hh:mm:ss.sss. I valori smalldatetime utilizzano il formato ODBC yyyy-mm-dd hh:mm:ss.

    Le versioni DB-Library delle funzioni di copia bulk accettano valori datetime e smalldatetime in stringhe di caratteri con diversi formati:

    • Il formato predefinito è mmm gg aaaa hh:mmxx, in cui xx è AM o PM.

    • Le stringhe di caratteri datetime e smalldatetime in qualsiasi formato supportato dalla funzione dbconvert di DB-Library.

    • Quando viene selezionata la casella Usa impostazioni internazionali nella scheda Opzioni di DB-Library dell'utilità Configurazione di rete client di SQL Server, le funzioni di copia bulk di DB-Library accettano anche le date nel formato della data regionale definito per l'impostazione locale del Registro di sistema del computer client.

    Le funzioni di copia bulk di DB-Library non accettano i formati datetime e smalldatetime ODBC.

    Se l'attributo dell'istruzione SQL_SOPT_SS_REGIONALIZE è impostato su SQL_RE_ON, le funzioni di copia bulk ODBC accettano il formato di data locale definito per le impostazioni locali del Registro di sistema del computer client.

  • Per visualizzare i valori money in formato carattere, le funzioni di copia bulk ODBC forniscono quattro cifre di precisione e nessun separatore virgola. Le versioni DB-Library forniscono solo due cifre di precisione e includono i separatori virgola.