将TextBox解析为SqlDbType.Date为“dd.MM.yyyy”

时间:2013-01-11 05:59:26

标签: c# sql-server ado.net datetime-parsing sqldbtype

我想在dd.MM.yyyy这样的页面上查看日期。 我喜欢这种方式,这与文化无关。

我不知道怎么做对。

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

格式异常:

  

字符串未被识别为有效的DateTime

我尝试了许多代码段,例如DateTime.ParseExact(dateAddTxtBox.Text, "dd.MM.yyyy", null)或使用System.Globalization.CultureInfo.InvariantCulture。什么都没有帮助!

或许它可能在SQL程序方面做得更好,不是吗?

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

当我没有使用模式格式化TextBox时,所有工作都很好:

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

UPD:

稍微提一下&gt;&gt; TextBox上有只读属性。 这就是为什么它不起作用!

现在的问题是,跳过ReadOnly="True"是否正确?我不希望用户在框中直接编辑日期。

UPD2:

ReadOnly="True"完全没有意义。它应该工作得很好!我不知道为什么。

1 个答案:

答案 0 :(得分:2)

不要指定SqlDbType.Date。相反,依靠自动检测,它将起作用:

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