2017-12-18 245 views
2

我正在从SQL Server数据库中循环取出reader.GetValue,所有工作,但是我在表中有一列数据类型Date。当我查看表格中的数据时,它显示正确的日期'18 -Dec-17'没有时间。Reader.GetValue日期值

reader的输出格式如下:'18 -Dec-17 12:00:00 AM'并且所有记录显示的12:00:00 AM都是相同的,无论日期更改如何。

有人可以让我知道这里发生了什么,有没有选择删除或我需要正则表达式或替换它?

while (reader.Read()) 
{ 
    while (cnt_field <= reader.FieldCount - 1) 
    { 
     db_output = db_output + "" + reader.GetValue(cnt_field) + " -\t "; 
     cnt_field++; 
    }//WEND 
    cnt_field = 0; 
    db_output = db_output + "\n\r"; 
}//WEND 
+3

据我所知,没有在.NET中没有'Date'唯一的数据类型。 –

+1

你不能改变它 - SQL Server有一个'DATE'数据类型,它只包含日期 - .NET不**有这样的类型。 SQL Server的'DATE'列总是映射到.NET'DateTime',因此* always *包含'00:00:00'时间部分 –

回答

4

随着"" + reader.GetValue(...)你正在做一个隐含的reader.GetValue(...).ToString()

然后您会看到的是DateTime的默认表示形式。 dotNET没有单独的Date类型。

因此,您将不得不在循环中检测DateTime值并应用所需的格式。

喜欢的东西

while (cnt_field <= reader.FieldCount - 1) 
{ 
    object value = reader.GetValue(cnt_field); 
    if (value is DateTime) 
    db_output += ((DateTime)value).ToShortDateString(); // apply a std/custom Date format 
    else 
     db_output += value.ToString(); 

    db_output += " -\t "; 
    .... 
} 
2

呼叫到reader.GetValue(cnt_field)返回一个DateTime(“盒装”作为object)表示日期。现在;无论是在数据库中还是在DateTime中,日期时间值都没有格式 - 它们只是日期/时间的原始数值。当你连接连接这与一个字符串,使用默认.ToString(),它应用您当前的文化和默认格式说明符。所以:如果是不是你打算:你需要告诉它你的原意:

var when = (DateTime)reader.GetValue(cnt_field); 
db_output = db_output + "" + when.ToString(chosenFormat) + " -\t "; 

您可能还需要明确指定一个文化 - CultureInfo.InvariantCulture通常是一个不错的选择用于记录等

你可以选择standard format specifierscustom format specifiers来构建你想要的格式。你可能想"dd-MMM-yy",所以:

db_output = db_output + "" + when.ToString("dd-MMM-yy") + " -\t "; 
+0

也是很好的答案,谢谢:-) – BH7