-1

我有以下代码:

…
var sqlCom =
            new SqlCommand("SELECT TOP 1 …,CONVERT(date,dtetme) AS dtetme… FROM class c WHERE id=@id;", sqlCon);
…

        try
        {
            while (sdr.Read())
                for (int i = 0; i < 11; i++)
                    rslt[i] = sdr.GetValue(i).ToString();
        }

该列属于我的SQL Server 2012数据库dtetme中的类型。我只想从中提取日期,这就是我使用函数的原因。在 SQL Server 上运行时,它只返回预期的日期,但在应用程序中,它返回带有默认时间戳的日期。我不想这样:。smalldatetimeCONVERT(date,dtetme)9/19/2013 12:00:00 AM

知道为什么它在 SQL Server 中而不是在我的应用程序中工作吗?

4

4 回答 4

2

日期是日期是日期。不是字符串。您应该将其读取为 date,然后根据您的选择对其进行格式化。对于数据库来说,日期只是一个数字——它没有格式的概念。所以:

var when = sdr.GetDateTime(i);
// now format when
于 2013-09-24T21:15:15.530 回答
1

它作为DateTime对象返回。在 .NetDateTime中不仅仅是日期,它还有一个时间部分,如果没有提供,则设置为 12:00 AM。

您应该将结果保存在DateTime类型对象中DateReader.GetDateTime,然后您可以根据需要对其进行格式化。

您可能会看到:自定义日期时间格式

就像是:

for (int i = 0; i < 11; i++)
{
    DateTime temp = sdr.GetDateTime(i);
    rslt[i] = temp.ToString("M/d/yyyy");
}
于 2013-09-24T21:17:11.447 回答
0

回答您的问题的关键是您的值表示为日期类型而不是字符串。sql server 中的日期表示为 Aaron 在评论中所写。

这意味着您需要使用某种模式对其进行格式化。在那种模式下,你会说你需要什么时间。

看来,在您的 RDBMS 中,默认情况下我使用的模式只打印日月和年。在您的应用程序中,从另一方面来说是模式dd/MM/YY hh:mm:ss tt

只需将其格式化为您所期望的。

一个例子

DateTime.Now.ToString("yyyy/MM/dd");

于 2013-09-24T21:17:28.020 回答
0

您看到此行为的原因是 .Net 没有 Date 数据类型,只有 DateTime。dtetme.ToString("d")如果您希望显示较短的日期,则可以使用。

在此处查看所有 ToString 选项:http: //msdn.microsoft.com/en-us/library/zdtaw1bw.aspx

于 2013-09-24T21:18:37.013 回答