2011-06-15 13 views
18

Tengo una tabla de datos con un nombre de columna "CustomerID" con Integer DataType. Dinámicamente, quiero agregar filas a DataTable. Por eso, había creado un objeto DataRow como:Asignar valor nulo a la columna de enteros en la tabla de datos

DataTable dt = new DataTable(); 
    DataRow DR = dt.NewRow(); 
    DR["CustomerID"] = Convert.ToInt32(TextBox1.Text); 

Pero si el cuadro de texto contiene una cadena vacía, se arroja el error. En ese caso, quiero asignar valor nulo a CustomerID. ¿Como hacer esto?

+0

@Marc no por qué recomendarle algo en su lugar usando DataTable? – mqpasta

+1

@Marc: Sí. Estoy usando DataTable. – thevan

Respuesta

25

A/cadena nula vacío está en el formato correcto; lo que se necesita para detectar y compensar ese escenario:

DR["CustomerID"] = string.IsNullOrWhiteSpace(text) 
     ? DBNull.Value : (object)Convert.ToInt32(text); 
4
DR["CustomerID"] = !string.IsNullOrEmpty(TextBox1.Text) 
        ? Convert.ToInt32(TextBox1.Text) 
        : DBNull.Value; 

Pero usted debe comprobar también que el valor es un número entero válido:

int value; 
if(int.TryParse(TextBox1.Text, out value)) 
{ 
    DR["CustomerID"] = value; 
} 
else 
{ 
    DR["CustomerID"] = DBNull.Value; 
} 
1

Puede utilizar DBNull.

DR["CustomerID"] = (TextBox.Text.Length == 0) ? Convert.ToInt32(TextBox1.Text) : DBNull.Value; 
1
if (TextBox1.Text.Trim() == String.Empty) 
    { 
     DR["CustomerID"] = null; 
    } 
    else 
    { 
     DR["CustomerID"] = Convert.ToInt32(TextBox1.Text); 
    } 
2

que podría hacerlo así:

DR["CustomerID"] = string.IsNullOrEmpty(TextBox1.Text) ? 
    null : Convert.ToInt32(TextBox1.Text); 
2

En primer lugar, por supuesto, el campo debe establecerse como anulable en el PP.

Y luego, ponerlo en DBNull.Value

1
DataTable dt = new DataTable(); 
DataRow DR = dt.NewRow(); 

if (String.IsNullOrEmpty(TextBox1.Text)) 
    DR["CustomerID"] = DBNull.Value; 
else 
    DR["CustomerID"] = Convert.ToInt32(TextBox1.Text); 
1

Si se declara la variable entera como int? es automáticamente encuadrado por el compilador de C# y usted puede asignar nulo a esa variable. Por ejemplo:

int? custID = null; 

Espero que ayude

2

Es necesario comprobar primero

if (TextBox1.Text.Length > 0) 
{ 
    DR["CustomerID"] = Convert.ToInt32(TextBox1.Text); ; 
} 
else 
{ 
    DR["CustomerID"] = null; 
} 
2
Int32 Temp = 0; 
if !(Int32.TryParse(TextBox1.Text,Temp)) 
    DR["CustomerID"] = DBNull.Value 
else 
    DR["CustomerID"] = Temp 
1

Cuando null no está permitido para ser insertado en DR["CustomerID"], se puede utilizar en lugar (int?)null así:

DR["CustomerID"] = string.IsNullOrEmpty(TextBox1.Text) ? 
(int?) null : Convert.ToInt32(TextBox1.Text); 
Cuestiones relacionadas