【问题标题】:Parse TextBox to SqlDbType.Date as "dd.MM.yyyy"将 TextBox 解析为 SqlDbType.Date 为“dd.MM.yyyy”
【发布时间】:2013-01-11 05:59:26
【问题描述】:

我希望日期在页面上看起来像 dd.MM.yyyy。 我喜欢这种方式,它与文化无关。

我不知道如何使它正确。

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

格式异常:

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

我尝试了许多 sn-ps,例如 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" ... />

更新:

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

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

UPD2:

ReadOnly="True" 根本没有意义。它应该可以正常工作!我不知道为什么。

【问题讨论】:

  • 当我尝试这个 DateTime.ParseExact("31.12.1983","dd.MM.yyyy",null) 时,它对我有用。为什么不放置断点并检查您的文本框实际返回的内容。同样在同一个地方尝试与我在手表中尝试的相同(带有一些静态日期),以便您可以知道您的文本框输入或每个日期是否有问题。试一试
  • 但TextBox不会!好的,我找到原因了!

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


【解决方案1】:

不要指定SqlDbType.Date。改用自动检测,它会起作用:

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

【讨论】:

  • 终于'ReadOnly'是原因!如果没有只读,则无需任何转换或解析即可工作。照原样。
  • @sublay:很奇怪。解析阶段或数据绑定阶段出现问题,而不是sql执行。
猜你喜欢
  • 2014-01-06
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2015-11-23
相关资源
最近更新 更多