Numéro d'article: 875411 - Dernière mise à jour: jeudi 22 juillet 2004 - Version: 1.3

BOGUE : uniquement 65,534 lignes sont insérées lorsque vous essayez d'insérer plus de 65 535 enregistrements dans une table SQL Server en utilisant la fonction SQLBulkOperations ODBC

Agrandir tout | Réduire tout

Symptômes

Lorsque vous utilisez la fonction ODBC (Open Database CONNECTIVITY) SQLBulkOperations pour insérer plus de 65 535 enregistrements dans une table Microsoft SQL Server, la fonction SQLBulkOperations insère uniquement 65,534 enregistrements dans la table SQL Server. Vous pouvez recevoir le message d'erreur suivantes :
[HY000] [0]
[Microsoft][Pilote ODBC SQL Server]Erreur inconnue s'est produite sur SQL Server. Connexion a été interrompue par le serveur.
Un message d'erreur est semblable à la suivante peut également être enregistré dans le fichier journal SQL Server des erreurs :
2004-07-19 21:13:35.86 spid52 erreur : gravité 17805,: 20, état: 3
2004-07-19 21:13:35.86 spid52 non valide tampon provenant de clients.
note Ce problème se produit sur les ordinateurs qui exécutent la version 32 bits de Microsoft Windows.

Cause

Sur les ordinateurs qui exécutent la version 32 bits de Windows, la fonction fSQLSetPos est appelée par la fonction SQLBulkOperations . La fonction fSQLSetPos convertit en interne l'attribut SQL_ATTR_ROW_ARRAY_SIZE le UDWORD type de données sur le type de données SQLUSMALLINT.

La valeur qui peut être stockée dans les plages SQLUSMALLINT données type de 0 à 65 535. Par conséquent, si la valeur de l'attribut SQL_ATTR_ROW_ARRAY_SIZE est plus de 65 535, la conversion de type données tronque les données de l'attribut SQL_ATTR_ROW_ARRAY_SIZE.

note L'attribut SQL_ATTR_ROW_ARRAY_SIZE indique le nombre de lignes que vous souhaitez insérer dans la table SQL Server.

Contournement

Pour contourner ce problème, n'insérez pas plus de 65 535 enregistrements dans la table SQL Server à l'aide de la fonction SQLBulkOperations . Pour insérer plus de 65 535 enregistrements dans une table SQL Server, vous devez exécuter les fonctions SQLBulkOperations plusieurs fois.

Statut

Microsoft a confirmé qu'il s'agit un bogue dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations

Sur un ordinateur qui exécute la version 64 bits de Windows, le type de données SQLSETPOSIROW est égal au type de données SQLULEN, et le type de données de l'attribut SQL_ATTR_ROW_ARRAY_SIZE est égal à SQLULEN. Par conséquent, dans la fonction fSQLSetPos , la conversion de type de l'attribut SQL_ATTR_ROW_ARRAY_SIZE vers le type de données SQLSETPOSIROW n'entraîne pas de toute perte de données. Par conséquent, la fonction SQLBulkOperations s'exécute correctement sur un ordinateur qui exécute la version 64 bits de Windows.

note La fonction SQLBulkOperations n'a aucune relation avec les fonctions de copie en bloc SQL Server. Applications doivent utiliser les fonctions de copie en bloc spécifiques à SQL Server pour effectuer des opérations copie en bloc.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2000 Standard
  • Microsoft Data Access Components 2.8
  • Microsoft Open Database Connectivity 3.0
Mots-clés : 
kbmt kbfunctions kbtable kberrmsg kbtshoot kbbug KB875411 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 875411  (http://support.microsoft.com/kb/875411/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
 

Traductions disponibles

 

Related Support Centers