我在Web窗体上有一个TextBox服务器控件,比如 txtDueDate 。我不想使用DateTimePicker但想要使用TextBox本身。用户以dd / mm / yyyy格式输入日期。
将此值传递给SQL Server 2005(Express)存储过程时,我使用类似:
的内容cmdParameters.AddWithValue("@DueDate", Convert.ToDateTime(txtDueDate.Text));
存储过程具有输入参数来处理此值,并声明为:
@DueDate SmallDateTime
我想知道SQL Server 2005在内部用于存储此日期的默认格式。在我的PC上,Windows XP区域设置被设置为dd / mm / yyyy格式。通过Management Studio查看记录时,它会正确存储。但我担心将使用此Web应用程序的用户。 Windows区域设置可能在PC上有所不同。
我想确定查询数据库的人,日期以dd / mm / yyyy格式显示。如果有人插入,02/01/2004,则不应成为有效的反向日期,例如:01/02/2004。
答案 0 :(得分:5)
DateTime
是DateTime
是DateTime
- 当存储在SQL Server中时它不具有任何(面向字符串)格式(它存储为64-有点长)。如果您已将参数作为DateTime
传递给存储过程,那么您应该没问题!该值将由SQL Server 存储而不更改任何格式 - 因为它没有与之关联的任何格式...
在给定的字符串格式中,日期表示的唯一一点是在SQL Server Management Studio中查看它,或者在例如SQL Server Management Studio中将其转换为字符串格式时。你的.NET应用程序。
如果您需要以某种方式将字符串表示传递到SQL Server(例如,用于搜索等),那么最强大且可以使用任何区域/语言设置的那个是< strong> ISO-8601 日期格式:YYYYMMDD
或者(如果您需要时间部分)YYYY-MM-DDTHH:MM:SS
(其中中间的T
是文字,将日期分开和时间部分)
答案 1 :(得分:2)
DateTime
值不应该作为基于文本的格式存储在数据库中 - 听起来它们不是。您应该将它们视为 DateTime
值。如何在出路时格式化这些值取决于查询数据库的任何内容,如果没有基本上只存储文本,你就无法控制它,你应该不做。 尽可能多地以“原生”格式处理该值。尽量避免与字符串格式进行转换。
我也避免在这里使用Convert.ToDateTime(text)
- 您如何确定系统默认格式是否适用于此处?您是否可以使用一组控件来提供实际值,而不是依赖于用户输入的内容?
答案 2 :(得分:0)
你选择......
1)如果您担心用户输入错误的格式(错误,如DateTime.Parse引发异常),则需要验证输入
2)如果您担心用户输入错误的格式(错误,如DateTime.Parse中引发异常),则使用日期选择器。
答案 3 :(得分:0)
到目前为止的转换是在客户端完成的,通过:
Convert.ToDateTime(txtDueDate.Text)
默认情况下,它使用当前的UI文化,但您可以使用第二个参数指定文化:
Convert.ToDateTime(txtDueDate.Text, new CultureInfo("en-GB"))