6

I am developing a project that has a DateTime field.

In it I'm using jQuery for the user to select the date format 'dd/MM/yyyy' taking into account that the date is not a required field.

How do you do to save DateTime fields not required in WebMatrix and Razor?

I was trying to do something like this:

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 trying to change

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:

ridermansb
  • 10,779
  • 24
  • 115
  • 226

2 Answers2

4

If your date field in the database is nullable (not marked as NOT NULL), you can change your datatype in C# to a nullable DateTime:

 DateTime? dtForecastComplete = null;

Now you can pass (and retrieve) a null value to/from the database.

GvS
  • 52,015
  • 16
  • 101
  • 139
  • In my code I use TryParse DateTime class and it does not accept nullable. See how it changed the code in this [link](http://jsfiddle.net/Riderman/JV5gD/). Just put the save. **Error:** "An overflow occurred while converting to datetime. Description: An unhandled exception occurred during the execution of overflow occurred while converting to datetime." – ridermansb Feb 28 '11 at 16:43
  • I added an auxiliary variable in order to use TryParse still the error occurs above. – ridermansb Feb 28 '11 at 16:45
  • Those are the problems i mentioned below. You have to alter your entire project if you have not used the nullable DateTime in the beginning. That's why in most cases a "Quick And Dirty" solution is a nice timesaving workaround. – Steven Ryssaert Mar 01 '11 at 11:13
  • This project is only for study, has a few pages. Change the entire project is not a problem. – ridermansb Mar 01 '11 at 13:58
0

If you wanted a "Quick And Dirty" solution, i would insert the DateTime.MinValue as initial value, and test on that when displaying it again to make it empty.

Of course, a better way is to dynamically build your insert statement and value list, to exclude it from the list if the value is empty.

Steven Ryssaert
  • 1,989
  • 15
  • 25
  • there is some way to put null instead of Min? – ridermansb Feb 28 '11 at 14:58
  • GvS answered that for you ;-) Make sure that you change the DataType of the DateTime field throughout your whole application though, or you will have Build errors. – Steven Ryssaert Feb 28 '11 at 15:00
  • Using the conversion: "db.Execute (sql paramters {}" – ridermansb Feb 28 '11 at 15:05
  • What does riding a query with one of the fields in brackets '[' ']'. Example: var db = UserHelper.DatabaseInstance; db.query (@ "INSERT INTO Events (OrganizerId, CalendarId, Name, Description, Location, AllDay, Start, [End]) Values (@ 0, @ 1, @ 2, @ 3, @ 4, @ 5, @ 6, @ 7) ", userId, calendarId, name, description, location, allday, utcStart, utcEnd); – ridermansb Feb 28 '11 at 17:17