2017-12-18 343 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