C# 将文本框解析为SqlDbType.Date为;“年月日”;

C# 将文本框解析为SqlDbType.Date为;“年月日”;,c#,sql-server,ado.net,datetime-parsing,sqldbtype,C#,Sql Server,Ado.net,Datetime Parsing,Sqldbtype,我希望日期在页面上看起来像dd.MM.yyyy。 我喜欢这种独立于文化的方式 我不知道该怎么做才对 cmd.Parameters.Add("@eventdate", SqlDbType.Date).Value = dateAddTxtBox.Text; 格式异常: 字符串未被识别为有效的日期时间 我尝试了许多代码片段,如DateTime.ParseExact(dateAddTxtBox.Text,“dd.MM.yyyy”,null)或使用System.Globalization.Culture

我希望日期在页面上看起来像dd.MM.yyyy。 我喜欢这种独立于文化的方式

我不知道该怎么做才对

cmd.Parameters.Add("@eventdate", SqlDbType.Date).Value = dateAddTxtBox.Text;
格式异常:

字符串未被识别为有效的日期时间

我尝试了许多代码片段,如
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, ...)
虽然我还没有使用模式格式化文本框,但所有操作都很好:

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

UPD:

稍微提一下>>文本框上有只读属性。 这就是它不起作用的原因

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

UPD2:


ReadOnly=“True”
毫无意义。它工作正常!我不知道为什么。

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

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

当我尝试使用这个DateTime.ParseExact(“31.12.1983”,“dd.MM.yyyy”,null)时,它对我有效。为什么不设置断点并检查文本框实际返回的内容呢。另外,在同一个地方尝试我在watch中尝试过的方法(使用一些静态日期),这样您就可以知道是您的文本框条目还是每个日期都有问题。只是一个尝试,但它不会与文本框!好吧,我找到原因了!最后,“只读”是原因!如果没有只读,则它不进行任何转换或解析。原样。@sublay:奇怪。解析阶段或数据绑定阶段出错,而不是sql执行。