sqlbulkcopy eccezione solo nella produzione

c# sqlbulkcopy sql-server

Domanda

Sto avendo un comportamento molto strano. Quando eseguo il test dell'applicazione localmente, tutto funziona correttamente, con IIS Express, l'ultima versione di VisualStudio 2015 Update 3.

Ma l'applicazione live in esecuzione su IIS8 su Windows Server 2012, a volte no.

A volte ottengo la seguente eccezione:

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.

Registro i dati elaborati dall'applicazione, se prendo lo stesso file di dati che genera l'eccezione in produzione e lo eseguo sul mio computer locale (collegato al DB di produzione), funziona alla grande. Nessuna eccezione.

La vera ragione dell'eccezione non può essere la lunghezza della colonna DB, perché ho controllato i dati, campo per campo. A proposito, se si trattasse di un problema di lunghezza della stringa, avrei ottenuto anche l'eccezione localmente.

Questa è la definizione 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));

E questa è la definizione della tabella del 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,
)

Sto sbattendo la testa contro ogni muro che riesco a trovare, ma ancora nessuna idea viene fuori su quale possa essere la causa di ciò.

Qualcuno ha qualche idea?

Risposta popolare

Quello che ho scoperto alla fine è che il problema è stato originato dalla deserializzazione di JSON, che si stava comportando diversamente nella modalità di rilascio rispetto alla modalità di debug.

I file di dati che venivano copiati in massa erano originariamente in formato json.

Quando ho scoperto, ho appena creato un pacchetto di aggiornamento di nuget -reinstall per newtonsoft (che era già stato aggiornato all'ultima versione) e ha risolto il problema.

Non è correlato a sqlbulkcopy.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché