Partager via


Conversion à partir de la bibliothèque de bases de données vers une copie en bloc ODBC

La conversion d'un programme de copie en bloc de bibliothèque de bases de données vers ODBC est facile car les fonctions de copie en bloc prises en charge par le pilote ODBC SQL Server Native Client sont semblables aux fonctions de copie en bloc de bibliothèque de bases de données, avec les exceptions suivantes :

  • Les applications de bibliothèque de bases de données passent un pointeur à une structure DBPROCESS comme premier paramètre de fonctions de copie en bloc. Dans les applications ODBC, le pointeur DBPROCESS est remplacé par un handle de connexion ODBC.

  • Les applications de bibliothèque de bases de données appellent BCP_SETL avant de se connecter pour activer des opérations de copie en bloc sur un DBPROCESS. Les applications ODBC appellent plutôt SQLSetConnectAttr avant de se connecter pour activer les opérations en bloc sur un handle de connexion :

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);
    
  • Le pilote ODBC SQL Server Native Client ne prend pas en charge les gestionnaires d'erreurs et les messages de bibliothèque de bases de données ; vous devez appeler SQLGetDiagRec pour obtenir les erreurs et messages déclenchés par les fonctions de copie en bloc ODBC. Les versions ODBC de fonctions de copie en bloc retournent les codes de retour de copie en bloc standard de SUCCEED ou FAILED, et non les codes de retour de style ODBC, tels que SQL_SUCCESS ou SQL_ERROR.

  • Les valeurs spécifiées pour le paramètre bcp_bindvarlen de bibliothèque de bases de données sont interprétées différemment du paramètre bcp_bindcbData ODBC.

    Condition indiquée

    Valeur varlen de bibliothèque de bases de données

    Valeur cbData ODBC

    Valeurs NULL fournies

    0

    -1 (SQL_NULL_DATA)

    Données de variables fournies

    -1

    -10 (SQL_VARLEN_DATA)

    Caractère de longueur nulle ou chaîne binaire

    N/A

    0

    Dans la bibliothèque de bases de données, une valeur varlen de -1 indique que des données de longueur variable sont fournies, ce qui, dans cbData ODBC, est interprété comme signifiant que seules des valeurs NULL sont fournies. Modifiez les spécifications varlen de bibliothèque de bases de données de -1 en SQL_VARLEN_DATA et les spécifications varlen de 0 en SQL_NULL_DATA.

  • Les paramètres bcp_colfmtfile_collen de bibliothèque de bases de données et bcp_colfmtcbUserData ODBC présentent le même problème que les paramètres bcp_bindvarlen et cbData notés ci-dessus. Modifiez les spécifications file_collen de bibliothèque de bases de données de -1 en SQL_VARLEN_DATA et les spécifications file_collen de 0 en SQL_NULL_DATA.

  • Le paramètre iValue de la fonction bcp_control ODBC est un pointeur vide. Dans la bibliothèque de bases de données, iValue était un entier. Transtypez les valeurs du iValue ODBC à « void * ».

  • L'option bcp_control BCPMAXERRS spécifie le nombre de lignes individuelles qui peuvent avoir des erreurs avant qu'une opération de copie en bloc échoue. La valeur par défaut de BCPMAXERRS est 0 (échec lors de la première erreur) dans la version de bibliothèque de bases de données de bcp_control et 10 dans la version ODBC. Les applications de bibliothèque de bases de données qui dépendent de la valeur par défaut de 0 pour mettre fin à une opération de copie en bloc doivent être modifiées de façon à appeler le bcp_control ODBC pour affecter la valeur 0 à BCPMAXERRS.

  • La fonction bcp_control ODBC prend en charge les options suivantes non prises en charge par la version de bibliothèque de bases de données de bcp_control :

    • BCPODBC

      En cas de définition sur TRUE, spécifie que les valeurs datetime et smalldatetime enregistrées au format caractère auront le préfixe et le suffixe de séquence d'échappement d'horodateur ODBC. Cela s'applique seulement aux opérations BCP_OUT.

      Avec BCPODBC défini à FALSE, une valeur datetime convertie en chaîne de caractères est sortie comme suit :

      1997-01-01 00:00:00.000
      

      Si BCPODBC a la valeur TRUE, la même valeur datetime est sortie comme suit :

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

      Si la valeur est TRUE, spécifie que les fonctions de copie en bloc insèrent les valeurs de données fournies pour les colonnes avec des contraintes d'identité. Si cela n'est pas défini, de nouvelles valeurs d'identités sont générées pour les lignes insérées.

    • BCPHINTS

      Spécifie diverses optimisations de copie en bloc. Cette option ne peut pas être utilisée sur SQL Server version 6.5 ou antérieure.

    • BCPFILECP

      Spécifie la page de codes du fichier de copie en bloc.

    • BCPUNICODEFILE

      Spécifie qu'un fichier de copie en bloc en mode caractère est un fichier Unicode.

  • La fonction bcp_colfmt ODBC ne prend pas en charge l'indicateur file_type de SQLCHAR car il est en conflit avec le typedef SQLCHAR ODBC. Utilisez plutôt SQLCHARACTER pour bcp_colfmt.

  • Dans les versions ODBC des fonctions de copie en bloc, le format d'utilisation des valeurs datetime et smalldatetime dans les chaînes de caractères est le format ODBC aaaa-mm-jj hh:mm:ss.sss ; les valeurs smalldatetime utilisent le format ODBC aaaa-mm-jj hh:mm:ss.

    Les versions de bibliothèque de bases de données des fonctions de copie en bloc acceptent les valeurs datetime et smalldatetime dans les chaînes de caractères avec plusieurs formats :

    • Le format par défaut est mmm jj aaaa hh:mmxxxx est AM ou PM.

    • Chaînes de caractères datetime et smalldatetime dans tout format pris en charge par la fonction dbconvert de bibliothèque de bases de données.

    • Lorsque la case à cocher Utiliser les paramètres internationaux est activée sous l'onglet Options de bibliothèque de bases de données de l'utilitaire réseau client SQL Server, les fonctions de copie en bloc de bibliothèque de bases de données acceptent également les dates au format de date régional défini pour les paramètres régionaux du Registre de l'ordinateur client.

    Les fonctions de copie en bloc DB-Library n'acceptent pas les formats datetime ni smalldatetime ODBC.

    Si l'attribut d'instruction SQL_SOPT_SS_REGIONALIZE a la valeur SQL_RE_ON, les fonctions de copie en bloc ODBC acceptent les dates au format de date régional défini pour les paramètres régionaux du Registre de l'ordinateur client.

  • Lors de la sortie de valeurs monnaie au format caractère, les fonctions de copie en bloc ODBC fournissent quatre chiffres de précision et aucun séparateur de virgule ; les versions de bibliothèque de bases de données fournissent seulement deux chiffres de précision et incluent les séparateurs de virgule.