Question

Je suis en train de insérer des données en vrac vers le serveur de base de données SQL Express. Quand vous faites bcp d'invite de commande Windows XP, je reçois l'erreur suivante:

C:\temp>bcp  in  -T -f  -S 

Starting copy...
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Native Client]Unexpected EOF encountered in BCP data-file

0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 4391

Alors, il y a un problème avec EOF. Comment ajouter un caractère EOF correct de ce fichier en utilisant Perl ou Python?

Était-ce utile?

La solution

EOF est fin du fichier. Ce qui est probablement apparu que le dossier est incomplet; le logiciel attend des données, mais il n'y en a pas eu à plus.

Ce genre de choses se produisent lorsque:

  • l'exportation est interrompue (quittez le logiciel de vidage pendant le dumping)
  • lors de la copie de la copie dumpfile d'annuler la
  • disque plein au cours de décharge

ce genre de choses.

Par ailleurs, bien que EOF est habituellement juste une fin de fichier, il existe bien un caractère EOF. Ceci est utilisé parce que la borne (ligne de commande) entrée ne se termine pas vraiment comme un fichier fait, mais il est parfois nécessaire de passer un EOF à un tel utilitaire. Je ne pense pas qu'il est utilisé dans les fichiers réels, au moins de ne pas indiquer une fin de fichier. Le système de fichiers connaît parfaitement bien quand le fichier est terminé, il n'a pas besoin d'un indicateur de trouver cela.

EDIT sans vergogne copié à partir d'un commentaire fourni par John Machin

Il peut arriver (uninentionally) dans les fichiers réels. Tout ce qu'il a besoin est (1) un utilisateur de saisie des données à taper Ctrl-Z par erreur, ne rien voir à l'écran, tapez la touche Maj-Z prévu, et continuer et (2) le logiciel de validation (écrit par exemple le neveu du président de la compagnie ) qui accepte joyeusement Ctrl-anykey dans les champs de texte et votre base de données a une petite bombe en elle, en attendant que quelqu'un pour produire une requête dans un fichier plat.

Autres conseils

EOF inattendu signifie que le lecteur de bcp trouvé un EOF quand il attendait plus de données. Ce EOF peut être:

(1) la fin de fichier physique réelle (pas d'octets à lire). Cela signifie que vous avez des données mis-formatées. Vérifiez à la fin de votre dossier pour un dossier incomplet.

ou

(2) sous Windows, où vous êtes, des programmes de lecture d'un fichier en mode texte conformes à la convention ancienne héritée par MS-DOS de CP / M de considérer Ctrl-Z (alias ^ Z alias \ 'X1A' alias SUB aka REMPLACER) comme un marqueur de fin de fichier lors de la lecture de tout fichier, pas seulement un terminal. Cela inclut Python - le comportement est déterminé par le C stdlib. Vérifiez pour '\ X1A' dans vos données.

Mise à jour répondre aux commentaires de façon lisible:

Dans Notepad ++, vous pouvez le faire afficher des caractères inhabituels en faisant Afficher / Show Symbol / Tous les caractères. Vous pouvez effectuer une recherche en faisant Ctrl-F, en tapant \ X1A dans la zone Rechercher, et sélectionnez le bouton radio étendu dans le panneau de recherche.

Ou vous pouvez avec un peu de Python obtenir le numéro de ligne du premier Ctrl-Z:

bytes = open('bcp.dat', 'rb').read()
zpos = bytes.find('\x1a')
# if zpos is -1, no Ctrl-Z in file
print 1 + bytes[:zpos].count('\r\n')

Si votre .dat a été créé n'a pas d'importance. Une involontaire Ctrl-Z peut se produire n'importe où dans un fichier créé sur tout système d'exploitation. Il est là où il est lu comme un fichier texte qui importe - Windows? Bang!

Ce n'est pas un problème avec manque EOF, mais avec EOF qui est là et ne devrait par bcp.

Je ne suis pas un expert en outil bcp, mais il semble que il y a un problème avec le format de vos fichiers de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top