2015-10-13 17 views
0

請幫我瞭解正在發生的事情.NET查詢曲解DD/MM/YYYY日期文字爲MM/DD/YYYY

我有一個從Access數據庫 我想返回數據的可視化基本應用來查詢數據庫字段與此格式「2015年1月12日」(12月1日) 日期做的,所以我有一個DateTimePicker

我在DB這個紀錄 - 2015年1月12日

當我更新我的代碼,以包括它datetimepicker值到查詢它不會不返回任何東西,如果我在12/01/2015它發現記錄w第i個2015年1月12日

我的查詢看起來是這樣的:

dim dd as date 
dd = datetimepicker.value 
qrytxt = "select * from table where [Date] = #" + dd + "#" 

,如果我把一個MsgBox返回qrytxt返回

select * from table where [Date] = #01/12/2015# 

,但它仍然會針對數據庫錯誤的日期...

我也有這個進口System.Globalization和我讀了一些有關CultureInfo但我不能把它在我的查詢工作。

還有什麼我需要包括或做什麼?

+1

*「我有一個Visual Basic應用程序......」 * - 你是指VB.NET應用程序? –

+0

對不起,它的Windows窗體,使用visual studio 2013 –

+0

你不能只是在你的代碼中重新格式化日期,然後將它傳遞到數據庫,以便它像'db/mm/yyyy'格式像db期望它?在VB中用'qrytxt =「SELECT ... [Date] =#」+ Format(dd,「mm/dd/yyyy」)+「#」' – JNevill

回答

0

正義的力量的格式在您日期值的日期創建一個字符串表達式:

Dim dd As Date 
dd = datetimepicker.value 
qrytxt = "select * from table where [Date] = #" + dd.ToString("yyyy'/'MM'/'dd") + "#" 
+0

可能不是戈登說的最正確的方法,但它適用於我。謝謝 –

1

爲什麼會出現這種情況?

,它的發生是因爲日期文字是模糊的,不匹配的Access數據庫引擎承擔爲明確的日期文字的格式。

無論如何,對動態SQL使用日期文字是錯誤的方法。該的DateTimePicker返回真值System.DateTime(這始終是明確的),所以你應該只使用它作爲參數化查詢的一部分:

Using cmd As New OdbcCommand("SELECT COUNT(*) AS n FROM Clients WHERE DOB = ?", conn) 
    cmd.Parameters.Add("?", OdbcType.DateTime).Value = DateTimePicker1.Value.Date 
    MessageBox.Show(cmd.ExecuteScalar) 
End Using