Parse TextBox to SqlDbType.Date as "dd.MM.yyyy"

2.7k views Asked by At

I want dates to look on page like dd.MM.yyyy. Me like this way, which is culture-independent.

I don't know how make it right.

cmd.Parameters.Add("@eventdate", SqlDbType.Date).Value = dateAddTxtBox.Text;

Format Exception:

String was not recognized as a valid DateTime

I tried many snippets like DateTime.ParseExact(dateAddTxtBox.Text, "dd.MM.yyyy", null) or using System.Globalization.CultureInfo.InvariantCulture as well. Nothing helped!

Or maybe it will better done in SQL procedure side, won't it?

CREATE PROCEDURE add_history
@user       VARCHAR(20),
@eventdate  DATE,
...
INSERT INTO History(userid, eventdate, ...)
VALUES ((SELECT userid FROM Users.SUsers WHERE suname=@user), @eventdate, ...)

All worked pretty good while I haven't format my TextBoxes with pattern:

<asp:TextBox id="dateAddTxtBox" runat="server" ReadOnly="True" />
<asp:CalendarExtender ID="AddTxtBoxCalendarExtender" runat="server" Enabled="True" TargetControlID="dateAddTxtBox" Format="dd.MM.yyyy" ... />

UPD:

A little mention >> there was read-only attribute on TextBox. That's why it didn't work!

Now the question is, is it correct to skip ReadOnly="True"? I don't want users to edit dates right in the box.

UPD2:

ReadOnly="True" doesn't make a sense at all. It works fine as it should! I don't know why.

1

There are 1 answers

2
abatishchev On BEST ANSWER

Don't specify SqlDbType.Date. Rely on auto-detection instead, it will work:

System.DateTime dateValue = DateTime.ParseExact(...);
command.Parameters.AddWithValue("@name", dateValue);