日期类型列返回日期和时间值

时间:2015-09-23 15:41:30

标签: c# sql-server sql-server-2008 date

我有一个表格,其中我存储日期(例如2015/10/10),列为date数据类型,而不是datetime。但是当我执行一个查询选择日期值并将其转换为C#中的ExecuteScalar()字符串以在TextBox上显示它时,我得到了日期和时间。

这是我的疑问:

SqlCommand cmd = new SqlCommand("select guaranty_date from telephone where ID_telephone = '"vaue"' ");

Text1Box.Text = cmd.ExcecuteScalar().ToString();

但我在文本框中收到了此结果:10/10/2015 12:00:00 a. m.

为什么?

4 个答案:

答案 0 :(得分:2)

日期数据类型没有时间。问题是c#中DateTime的默认字符串表示形式 试试这个:

Text1Box.Text = ((DateTime)cmd.ExcecuteScalar()).ToString("dd/MM/yyyy");

答案 1 :(得分:2)

这里没有问题或错误。 .NET没有仅限日期的类型,它只有DateTime和DateTimeOffset。你可以说这个遗漏几乎是一个框架bug,实际上有一个OSS project正在进行,旨在将这些类型添加到.NET。

如果只想渲染DateTime的日期部分,则需要指定适当的格式字符串,例如d作为特定于语言环境的短日期模式:

DateTime result=cmd.ExcecuteScalar();
Text1Box.Text = result.ToString("d");

您可以在Standard Date and Time formats中查看各种标准日期格式。

如果您想使用特定格式,无论用户/线程的区域设置是什么,您都需要使用custom format string,例如:

Text1Box.Text = result.ToString("yyyy/MM/dd",CultureInfo.InvariantCulture);

我通过CultureInfo.InvariantCulture的原因是/是日期分隔符占位符。在某些文化中(例如德语),这是-.。提到这个潜在的陷阱几乎成了SO传统。

答案 2 :(得分:0)

没有与SQL Server date类型完全匹配的CLR类型。 SQL Server date类型映射到CLR DateTime类型。 DateTime类型表示一个时间点,而不仅仅是日期,因此当您调用DateTime.ToString()时,它还会显示时间部分。但是如果你知道时间部分是无关紧要的,你可以使用DateTime.ToString()方法的另一个重载。

答案 3 :(得分:0)

正如其他人所说,C#不包含“仅限日期”的数据类型。如果这仅用于显示值,您可以更改查询以返回按您希望的方式格式化的日期:

SqlCommand cmd = new SqlCommand("select convert(char(10),guaranty_date,103) as guaranty_date from telephone where ID_telephone = '"vaue"' ");
Text1Box.Text = cmd.ExcecuteScalar().ToString();

MSDN上,您可以找到可能的日期格式