2011-04-16 22 views
5

Tengo dos casos en que iba a necesitar para configurar campo DateTime en SQL en nulo. Yo uso C# y LINQ para SQL Clases. Leí muchas preguntas sobre stackoverflow que son como mi pregunta, pero aún así le doy a la mía un poco diferente.Cómo configurar SQL DateTime en nulo de LINQ

Cuando insertamos un cliente nuevo.

código correspondiente:

Customer customer = new Customer(); 
customer.CustomerName = txt_name.Text; 
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : //send null here; 

customer.DOB es System.DateTime.

Lo que intenté es:

1)

customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : SqlDateTime.Null; 

Pero esto no va a tener éxito como SqlDateTime no se puede convertir a System.DateTime.

2)

DateTime? nullDateTime = new DateTime(); 
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : nullDateTime.Value 

En este caso, construir tiene éxito pero será una excepción SqlDateTime desbordamiento.

Entonces cómo pasar valor nulo

Propiedad de DOB miembros en LINQ DATACLASS

enter image description here

Muchos de ellos sugieren para establecer Auto valor generado en true y no introduzca ningún valor. Es cierto, funciona en casos de inserción.

Pero ahora asumen, ya existe una entrada de cliente donde un valor de fecha y hora se establece en el campo Fecha de Nacimiento. Ahora el usuario quiere borrar este valor (eliminar la fecha de nacimiento), luego, en este caso, tengo que pasar un valor nulo usando UpdateOn para borrar la fecha y hora archivada en la fila correspondiente del cliente.

Muchas gracias de antemano :)

+0

¿Se puede anular, no podría simplemente configurarlo en 'nulo'? –

+0

'Customer.DOB' debe ser' DateTime? 'En lugar de' DateTime' si la columna es anulable. –

Respuesta

13

Usted debe ser capaz de usar:

Customer customer = new Customer(); 
customer.CustomerName = txt_name.Text; 
customer.DOB = dtp_dob.Checked 
        ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
        : (DateTime?) null; 

Nota al elenco de null a DateTime?. El problema actual es que el compilador no puede calcular el tipo de expresión condicional basada en los operandos.

El problema con su segundo intento es que se está creando un nuevo valor DateTime no anulable, es decir, 1 ª de enero de 0001 AD. Puede cambiar eso a:

DateTime? nullDateTime = null; 
customer.DOB = dtp_dob.Checked 
        ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
        : nullDateTime; 
+0

Excelente, funcionó como un encanto :) ¡Gracias ...! – Marshal

0

PLZ tratar

if(dtp_dob.Checked) 
{ 
    customer.DOB = DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")); 
} 
else 
{ 
    cstomer.DOB =null; 
} 

desde DOB es anulable este código le dará lo que quiere. Por cierto que no puedo encontrar nada como nullDateTime.Value