Come inserire un valore nullo per il campo numerico di un datatable in c #?

c# insert null numeric sqlbulkcopy

Domanda

Considera che il mio datatable generato dinamicamente contiene i seguenti campi Id,Name,Mob1,Mob2

Se il mio datatable ha questo viene inserito correttamente,

Id Name Mob1        Mob2
1  acp  9994564564  9568848526

Ma quando è così, fallisce dicendo:

Id Name Mob1        Mob2
1  acp  9994564564  

The given value of type String from the data source cannot be converted to type decimal of the specified target column.

Generando il mio datatable leggendo un file csv,

    CSVReader reader = new CSVReader(CSVFile.PostedFile.InputStream);
    string[] headers = reader.GetCSVLine();
    DataTable dt = new DataTable();
    foreach (string strHeader in headers)
    {
        dt.Columns.Add(strHeader);
    }
    string[] data;
    while ((data = reader.GetCSVLine()) != null)
    {
        dt.Rows.Add(data);
    }

Qualsiasi suggerimento su come inserire un valore nullo per il campo numerico durante BulkCopy in c # ...

MODIFICARE:

Ho provato questo dt.Columns["Mob2"].AllowDBNull = true; ma non sembra funzionare ...

Risposta accettata

Ho funzionato assegnandogli un valore nullo ...

if(dr["Mob2"] == "")
  dr["Mob2"] =null;

Risposta popolare

Sei sicuro che l'errore non si verifichi da qualche altra parte nella tua applicazione? In che modo la tua DataColumn sa anche che contiene valori decimali e non stringhe, tu non definisci il suo DataType.

Ad ogni modo l'errore dice che il problema è una conversione stringa-decimale (non un problema is-null), quindi penso che tu riceva una stringa emty "" piuttosto che null quando leggi la seconda riga. Prova a impostare manully i campi dell'array di dati su null se contengono stringhe vuote prima di chiamare Rows.Add



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é