exception sqlbulkcopy en production seulement

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

Mais l'application en cours d'exécution sur IIS8 sur Windows Server 2012, parfois non.

Parfois, j'ai l'exception suivante:

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

J'enregistre datatables traitées par l'application, si je prends exactement le même file de données générant l'exception en production, et je l'exécute sur ma machine locale (connectée à la DB de production), ça marche super bien. Pas exception.

La vraie raison de l'exception ne peut pas être la longueur de la colonne DB, car j'ai vérifié datatables, champ par champ. Et d'ailleurs si c'était un problème de longueur de string, j'obtiendrais l'exception localement aussi.

C'est la définition datatable:

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

Et voici la définition de la table de database:

 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 casse la tête contre tous les murs que je peux find, mais aucune idée ne se dégage de ce qui pourrait en être la cause.

Quelqu'un a une idée?

Ce que j'ai découvert à la fin, c'est que le problème a été causé par la déserialization de json, qui se comportait différemment en mode release que en mode debug.

Les files de données en cours de copy en bloc étaient initialement au format json.

Quand j'ai découvert, je viens de faire une mise à jour Package-package -réinstall pour newtonsoft package (qui a déjà été mis à jour à la dernière version) et il a résolu le problème.

Était sans rapport avec sqlbulkcopy.

Essayez d'append ssortingng dataColumn en utilisant le code suivant:

 DataColumn d = new DataColumn(fieldname, typeof(ssortingng)); d.MaxLength = 10; //Specify max length dt.Columns.Add(d); 

Donc, l'exception sera levée lors de l'insertion de données dans dataTable et vous spécifierez la colonne