exception sqlbulkcopy en production uniquement

c# sqlbulkcopy sql-server

Question

J'ai un comportement très étrange. Lorsque je teste l'application localement, tout fonctionne correctement, avec IIS Express, la dernière version de VisualStudio 2015 Update 3.

Mais l'application en direct exécutée sur IIS8 sous Windows Server 2012 ne fonctionne parfois pas.

Parfois, j'obtiens l'exception suivante:

System.InvalidOperationException: The given value of type String from the data source cannot be converted to type nvarchar of the specified target column. ---> System.InvalidOperationException: String or binary data would be truncated.

Je consigne les données traitées par l'application, si le même fichier de données génère l'exception en production et que je l'exécute sur ma machine locale (connectée à la base de production), cela fonctionne très bien. Pas exception.

La vraie raison de l'exception ne peut pas être la longueur de la colonne de la base de données, car j'ai vérifié les données champ par champ. Et d'ailleurs, s'il s'agissait d'un problème de longueur de chaîne, j'obtiendrais aussi l'exception localement.

C'est la définition datatable:

  var dt = new DataTable();
  dt.Columns.Add("gid", typeof(int));
  dt.Columns.Add("season", typeof(string));
  dt.Columns.Add("brand", typeof(string));
  dt.Columns.Add("brandid", typeof(string));
  dt.Columns.Add("pattern", typeof(string));
  dt.Columns.Add("width", typeof(string));
  dt.Columns.Add("ratio", typeof(string));
  dt.Columns.Add("diameter", typeof(string));
  dt.Columns.Add("load", typeof(string));
  dt.Columns.Add("speed", typeof(string));
  dt.Columns.Add("isrunflat", typeof(bool));
  dt.Columns.Add("price", typeof(decimal));
  dt.Columns.Add("original_descr", typeof(string));
  dt.Columns.Add("source", typeof(string));
  dt.Columns.Add("createdon", typeof(DateTime));
  dt.Columns.Add("updatedon", typeof(DateTime));
  dt.Columns.Add("eulgas", typeof(string));
  dt.Columns.Add("eulrai", typeof(string));
  dt.Columns.Add("eulnc", typeof(string));
  dt.Columns.Add("euldb", typeof(string));

Et voici la définition de la table de base de données:

CREATE TABLE [dbo].[grabbed_zero](
    [gid] [bigint] NOT NULL,
    [season] [nvarchar](50) NOT NULL,
    [brand] [nvarchar](50) NOT NULL,
    [brandid] [nvarchar](50) NOT NULL,
    [pattern] [nvarchar](100) NOT NULL,
    [width] [nvarchar](10) NOT NULL,
    [ratio] [nvarchar](10) NOT NULL,
    [diameter] [nvarchar](10) NOT NULL,
    [load] [nvarchar](10) NOT NULL,
    [speed] [nvarchar](10) NOT NULL,
    [isrunflat] [int] NOT NULL,
    [price] [decimal](10, 2) NOT NULL,
    [original_descr] [nvarchar](100) NOT NULL,
    [source] [nvarchar](50) NOT NULL,
    [createdon] [datetime] NOT NULL,
    [updatedon] [datetime] NOT NULL,
    [EULGAS] [nvarchar](10) NOT NULL,
    [EULRAI] [nvarchar](10) NOT NULL,
    [EULNC] [nvarchar](10) NOT NULL,
    [EULDB] [nvarchar](10) NOT NULL,
)

Je me cogne la tête contre tous les murs que je peux trouver, mais aucune idée n’en ressort pour ce qui peut en être la cause.

Quelqu'un a une idée?

Réponse populaire

Ce que j’ai découvert à la fin, c’est que le problème était dû à la désérialisation json, qui se comportait différemment en mode publication que le mode débogage.

Les fichiers de données copiés en bloc étaient à l'origine au format JSON.

Quand j'ai découvert cela, je viens de créer un nuget Update-Package -reinstall pour le paquet newtonsoft (qui était déjà mis à jour avec la dernière version) et le problème a été résolu.

Était non liée à sqlbulkcopy.



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