Exception SqlBulkCopy, trouver la colide

sql sqlbulkcopy

Question

En utilisant SqlBulkCopy et en obtenant cette exception:

A reçu une longueur de colonne non valide du client bcp pour la colonne 30.

Je me frappe la tête contre celui-ci depuis des heures. Je sais quelle ligne a le problème, mais je ne sais pas quelle colonne "colid 30" est. Il y a 178 colonnes dans la table de données. Toutes les valeurs semblent être correctes et je ne vois aucune de celles qui sont plus longues que les types de données de colonne de ma base de données.

Cette base de données contient des listes de propriétés et compte actuellement plus de 3 millions d'enregistrements, qui sont tous très bien.

Y a-t-il un moyen de déterminer ce qu'est la colide 30? Ou existe-t-il un moyen de visualiser le code SQL réel que le bcp soumet à la base de données?

Réponse acceptée

J'espère que cela aide également à résoudre les problèmes de quelqu'un d'autre.

L'erreur était due au fait que l'un des champs string / varchar du datatable avait un point-virgule ";" dans sa valeur. Apparemment, vous devez vous échapper manuellement avant de procéder à l'insertion!

J'ai fait une boucle à travers toutes les lignes / colonnes et fait:

string.Replace(";", "CHAR(59)");

Après cela, tout est inséré en douceur.


Réponse populaire

Vérifiez la taille des colonnes dans la table que vous faites insérer en vrac. les colonnes varchar ou autres chaînes doivent éventuellement être étendues.

par exemple, augmenter la taille de 30 à 50 =>

ALTER TABLE [dbo].[TableName]
ALTER COLUMN [ColumnName] Varchar(50)


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi