2016-02-02 66 views
0

我有一個SQL表,我試圖讀入我的應用程序,其中包含一個日期時間列。當我在我的應用程序中使用SqlDataAdapter填充DataTable時,它會將年份截斷爲2位數年(因此1/1/1999或1/1/2099均顯示1/1/99)。SqlDataAdapter截斷日期時間爲2位年

Dim dt As DataTable 
Using connection As New SqlConnection("...") 
    Dim query As String = "SELECT * FROM [foo]" 
    Dim adapter As New SqlDataAdapter(query, connection) 

    connection.Open() 
    adapter.Fill(dt) 
End Using 

直接在SQL執行同樣的SELECT語句返回一個4位數字的年份日期時間,所以它似乎是一個VB問題,而不是一個SQL問題。

我怎樣才能確保它讀取全年並避免類似Y2K的錯誤?

+2

日期沒有格式。您正在使用的應用程序查看決定如何在視頻/打印機上以字符串格式顯示日期的日期。你使用哪個應用程序來查看數據字段? – Steve

+0

在我的應用程序中,我使用自定義日期格式dd/MM/yyyy填充DateTimePicker,並且如果日期設置爲1/1/2099,則DateTimePicker會將日期顯示爲1/1/1999。我追溯到最初的數據拉取,因爲當它在填充後在調試器中查看DataTable時,它將日期顯示爲1/1/99,並且我的Windows區域設置被設置爲猜測1930年至2029. – Kevin

+0

數據庫中的DataType是什麼? –

回答

1

找到了答案。

我的Windows區域設置被設置爲2位數的年份。 DataTable正確保存了完整的日期,但在設置DateTimePicker的值之前,DataTable中保存的日期已轉換爲未指定特定日期格式的字符串。

由於沒有指定格式,它使用我的本地設置並截斷了一年中的前兩位數字。

不言而喻,但在將日期轉換爲字符串時要小心,並在有意義時指定特定的格式。理想情況下,不要首先將日期轉換爲字符串(在我的情況下,它是執行此操作的傳統代碼)!

+0

'理想情況下,不要將日期轉換爲字符串[+1]! – Plutonix

相關問題