Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Exécute une copie en bloc complète des données entre une table de base de données et un fichier utilisateur.
Syntaxe
RETCODE bcp_exec (
HDBC
hdbc
,
LPDBINT
pnRowsProcessed
);
Les arguments
hdbc
Handle de connexion ODBC compatible avec la copie en bloc.
pnRowsProcessed
Pointeur vers une DBINT. La fonction bcp_exec remplit cette DBINT avec le nombre de lignes correctement copiées. Si pnRowsProcessed a la valeur NULL, il est ignoré par bcp_exec.
Retours
RÉUSSITE, SUCCEED_ASYNC ou FAIL. La fonction bcp_exec retourne SUCCEED si toutes les lignes sont copiées. bcp_exec retourne SUCCEED_ASYNC si une opération de copie en bloc asynchrone est toujours en attente. bcp_exec retourne FAIL si un échec complet se produit ou si le nombre de lignes générant des erreurs atteint la valeur spécifiée pour BCPMAXERRS à l’aide de bcp_control. BCPMAXERRS a la valeur par défaut 10. L’option BCPMAXERRS affecte uniquement les erreurs de syntaxe détectées par le fournisseur lors de la lecture des lignes du fichier de données (et non des lignes envoyées au serveur). Le serveur abandonne le lot lorsqu’il détecte une erreur avec une ligne. Vérifiez le paramètre pnRowsProcessed pour le nombre de lignes correctement copiées.
Remarques
Cette fonction copie les données d’un fichier utilisateur dans une table de base de données ou inversement, en fonction de la valeur du paramètre eDirection dans bcp_init.
Avant d’appeler bcp_exec, appelez bcp_init avec un nom de fichier utilisateur valide. L’échec de cette opération entraîne une erreur.
bcp_exec est la seule fonction de copie en bloc susceptible d’être en attente pendant une durée quelconque. Il s’agit donc de la seule fonction de copie en bloc qui prend en charge le mode asynchrone. Pour définir le mode asynchrone, utilisez SQLSetConnectAttr pour définir SQL_ATTR_ASYNC_ENABLE sur SQL_ASYNC_ENABLE_ON avant d’appeler bcp_exec. Pour tester l’achèvement, appelez bcp_exec avec les mêmes paramètres. Si la copie en bloc n’est pas encore terminée, bcp_exec retourne SUCCEED_ASYNC. Elle retourne également dans pnRowsProcessed un nombre d’états du nombre de lignes envoyées au serveur. Les lignes envoyées au serveur ne sont pas validées tant que la fin d’un lot n’a pas été atteinte.
Pour plus d’informations sur une modification cassante de la copie en bloc à partir de SQL Server 2005, consultez Exécution d’opérations de copie en bloc (ODBC).
Exemple :
L’exemple suivant montre comment utiliser bcp_exec :
// Variables like henv not specified.
HDBC hdbc;
DBINT nRowsProcessed;
// Application initiation, get an ODBC environment handle, allocate the
// hdbc, and so on.
...
// Enable bulk copy prior to connecting on allocated hdbc.
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,
SQL_IS_INTEGER);
// Connect to the data source, return on error.
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,
_T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))
{
// Raise error and return.
return;
}
// Initialize bulk copy.
if (bcp_init(hdbc, _T("pubs..authors"), _T("authors.sav"), NULL, DB_OUT)
== FAIL)
{
// Raise error and return.
return;
}
// Now, execute the bulk copy.
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)
{
if (nRowsProcessed == -1)
{
printf_s("No rows processed on bulk copy execution.\n");
}
else
{
printf_s("Incomplete bulk copy. Only %ld row%s copied.\n",
nRowsProcessed, (nRowsProcessed == 1) ? "": "s");
}
return;
}
printf_s("%ld rows processed.\n", nRowsProcessed);
// Carry on.