2011-02-28 7 views
6

Estoy desarrollando un proyecto que tiene un campo DateTime.Guardar DateTime con WebMatrix y Razor

En él estoy usando jQuery para que el usuario seleccione el formato de fecha 'dd/MM/aaaa' teniendo en cuenta que la fecha no es un campo obligatorio.

¿Cómo se hace para guardar los campos DateTime no necesarios en WebMatrix y Razor?

yo estaba tratando de hacer algo como esto:

I put only the code which I think is important to complete the code can be found here

@{ 
//Get data 
string TaskForecastCompletion= Request["txtForecastCompletion"]; 
string TaskCompletedIn= Request["txtCompletedIn"]; 

        DateTime dtForecastCompletion = default(DateTime); 
        if (!Request["txtForecastCompletion"].IsEmpty() && !DateTime.TryParse(Request["txtForecastCompletion"], out dtForecastCompletion)) 
        { 
          ModelState.AddError("PrevisaoFinalizacao", "Data de previsão de finalização é inválida. Formato: dd/mm/aaaa"); 
        } 


            sql = @"update Tasks set Title = @0 ,Description = @1 ,ProjectID = @2 ,ForecastCompletion = @3 ,RequestBy = @4 ,CompletedIn = @5 ,Modified = getdate() ,Priority = @6 where ID = @7"; 
            db.Execute(sql, TaskTitle,TaskDescription, ProjectID, dtForecastCompletion, TaskRequestBy, dtTaskCompletedIn, TaskPriority, TaskID); 
} 

error tratar de cambiar

An overflow occurred while converting to datetime. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlServerCe.SqlCeException: An overflow occurred while converting to datetime.

Source Error:

Line 62: { Line 63:
sql = @"update Tasks set Title = @0 ,Description = @1 ,ProjectID = @2 ,ForecastCompletion = @3 ,RequestBy = @4 ,CompletedIn = @5 ,Modified = getdate() ,Priority = @6 where ID = @7"; Line 64:
db.Execute(sql, TaskTitle,TaskDescription, ProjectID, dtForecastCompletion, TaskRequestBy, dtTaskCompletedIn, TaskPriority, TaskID); Line 65:
} Line 66:

+0

Por favor, publique el error en un bloque de código sin eliminar las nuevas líneas. – SLaks

Respuesta

4

Si su campo de fecha en la base de datos es anulable (no marcada como NOT NULL), usted puede cambiar su tipo de datos en C# para un nullable DateTime:

DateTime? dtForecastComplete = null; 

Ahora usted puede pasar (y recuperar) un valor nulo hacia/desde la base de datos.

+0

En mi código utilizo la clase TryParse DateTime y no acepta las anulaciones. Vea cómo cambió el código en este [enlace ] (http://jsfiddle.net/Riderman/JV5gD/). Solo guarde el archivo. ** Error: ** "Se produjo un desbordamiento al convertir a fecha y hora. Descripción: Ocurrió una excepción no controlada durante la ejecución de se produjo un desbordamiento al convertir a fecha y hora. " – ridermansb

+0

Agregué una variable auxiliar para utilizar TryParse pero el error aparece arriba. – ridermansb

+0

Esos son los problemas que mencioné a continuación. Tienes que modificar todo tu proyecto si no has usado el DateTime que se puede anular al principio. Es por eso que en la mayoría de los casos, una solución "Rápida y sucia" es una buena solución para ahorrar tiempo. –

0

Si quería una solución "rápida y sucia", lo haría inserte el DateTime.MinValue como valor inicial y pruébelo cuando lo vuelva a mostrar para dejarlo vacío.

Por supuesto, una mejor manera es construir dinámicamente su declaración de inserción y su lista de valores, para excluirla de la lista si el valor está vacío.

+0

hay alguna forma de poner null en lugar de Min? – ridermansb

+0

GvS respondió eso para usted ;-) Asegúrese de cambiar el tipo de datos del campo DateTime en toda su aplicación, o tendrá errores de compilación. –

+0

Usando la conversión: "db.Execute (sql paramters {}" – ridermansb