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

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

La conversion d’un programme de copie en bloc DB-Library en ODBC est facile, car les fonctions de copie en bloc prises en charge par le pilote ODBC SQL Server Native Client sont similaires aux fonctions de copie en bloc DB-Library, à quelques exceptions près :

  • 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.

  • DB-Library applications appellent BCP_SETL avant de se connecter pour activer les 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 DB-Library gestionnaires de messages et d’erreurs ; vous devez appeler SQLGetDiagRec pour obtenir les erreurs et les 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 varlenDB-Library bcp_bind sont interprétées différemment du paramètre ODBC bcp_bindcbData.

    Condition indiquée DB-Library valeur varlen Valeur ODBC cbData
    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/D 0

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

  • Le DB-Library bcp_colfmtfile_collen et le bcp_colfmt ODBC bcp_colfmt cbUserData présentent le même problème que les paramètres bcp_bind varlen et cbData indiqués ci-dessus. Modifiez les spécifications file_collen DB-Library de -1 en SQL_VARLEN_DATA et les spécifications file_collen de 0 à SQL_NULL_DATA.

  • Le paramètre iValue de la fonction de bcp_control ODBC est un pointeur void. Dans DB-Library, iValue était un entier. Castez les valeurs de l’iValue ODBC en void *.

  • L’option de bcp_control BCPMAXERRS spécifie le nombre de lignes individuelles pouvant comporter des erreurs avant l’échec d’une opération de copie en bloc. La valeur par défaut pour BCPMAXERRS est 0 (échec lors de la première erreur) dans la version DB-Library de bcp_control et 10 dans la version ODBC. DB-Library les applications qui dépendent de la valeur par défaut 0 pour mettre fin à une opération de copie en bloc doivent être modifiées pour appeler le bcp_control ODBC pour définir BCPMAXERRS sur 0.

  • La fonction de bcp_control ODBC prend en charge les options suivantes qui ne sont pas prises en charge par la version DB-Library de bcp_control :

    • BCPODBC

      Lorsqu’il est défini sur TRUE, spécifie que les valeurs datetime et smalldatetime enregistrées au format caractère auront le préfixe et le suffixe de la séquence d’échappement d’horodatage ODBC. Cela s'applique seulement aux opérations BCP_OUT.

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

      1997-01-01 00:00:00.000  
      

      Avec BCPODBC défini sur TRUE, la même valeur datetime est sortie que :

      {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 les versions 6.5 ou antérieures de SQL Server.

    • 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 de bcp_colfmt ODBC ne prend pas en charge l’indicateur de file_type de SQLCHAR, car elle est en conflit avec le typedef SQLCHAR ODBC. Utilisez SQLCHARACTER à la place 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 de aaaa-mm-jj hh:mm:ss.sss ; les valeurs smalldatetime utilisent le format ODBC de aaaa-mm-jj hh:mm:ss.

    Les versions DB-Library des fonctions de copie en bloc acceptent les valeurs datetime et smalldatetime dans les chaînes de caractères à l’aide de plusieurs formats :

    • Le format par défaut est mmm jj aaaa hh:mmxx , où xx est AM ou PM.

    • chaînes de caractères datetime et smalldatetime dans n’importe quel format pris en charge par la fonction dbconvert DB-Library.

    • Lorsque la case Utiliser les paramètres internationaux est cochée sous l’onglet Options de DB-Library de l’utilitaire réseau client SQL Server, les fonctions de copie en bloc DB-Library acceptent également les dates au format de date régional défini pour les paramètres régionaux du registre d’ordinateurs clients.

    Les fonctions de copie en bloc DB-Library n’acceptent pas les formats datetime et 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 monétaires au format caractère, les fonctions de copie en bloc ODBC fournissent quatre chiffres de précision et pas de séparateurs de virgules ; DB-Library versions fournissent seulement deux chiffres de précision et incluent les séparateurs de virgules.

Voir aussi

Exécution d’opérations de copie en bloc (ODBC)
Bulk Copy Functions