SqlBulkCopy échoue avec un problème de conversion de chaîne

.net sql sqlbulkcopy

Question

J'ai une vue qui génère un certain nombre de colonnes que je souhaite charger en bloc dans une autre table comportant des colonnes identiques.

Cette procédure fonctionnait bien lorsque je parcourais SqlDataReader et que je faisais une insertion avec SqlParameters en utilisant à chaque fois SqlCommand. Évidemment, pour beaucoup de 100 000 rangs, c'était trop lent.

Je me suis tourné vers SqlBulkCopy, car il semblait que cela fonctionnerait, car les noms de colonne des vues et les noms et types de colonnes des tables de la base de données cible (car la procédure ci-dessus a fonctionné!)

Toutefois, lors du premier enregistrement, il échoue avec une exception InvalidOperationException indiquant que "la valeur donnée de type String ne peut pas être convertie en type smalldatetime de la colonne cible spécifiée". Il y a juste une colonne de date dans cette première ligne et sa valeur est NULL.

La vue ne renvoie qu'un sous-ensemble de colonnes, mais celles qui ne le sont pas sont toutes nullables.

Toute aide serait appréciée.

Réponse acceptée

sqlbulkcopy ne mappe pas automatiquement entre les colonnes portant le même nom. Cela suppose que votre sélection retournera les colonnes dans le même ordre que dans la table de destination.

Donc, s'il y a 7 colonnes dans la table de destination et que la vue renvoie 5, il essaiera de mettre ces 5 colonnes dans les 5 premières colonnes de la table de destination.

La classe SqlBulkCopy peut prendre une collection de mappages de colonnes. Cela devrait faire l'affaire


Réponse populaire

essayez de régler SET DATEFORMAT sur le format correct (ymd, dmy, mdy, ...) pour votre connexion et réessayez. cette erreur se produit généralement si vous avez des dates dans un format localisé et non dans un format indépendant des paramètres régionaux.

Pour ce qui est de tout faire en une seule insertion, ceci n’est pas recommandé car il s’agit d’une transaction longue et non d’une opération d’insertion en bloc.



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