2011-08-25 40 views
1

我正嘗試使用asp.net創建一個拍賣網站。我的拍賣的開始日期&時間和結束日期&時間存儲在我的SQL Server 2008 R2數據庫作爲日期時間類型。我正在使用vb.net。我試圖創建一個select語句,在該語句中我可以查詢相對於當前日期和時間的日期和時間部分(以便僅顯示當前正在進行的拍賣)。我可以使用Date.Now函數成功查詢日期部分,但時間給了我一個麻煩。 DateAndTime.Now不起作用。我甚至試圖分開數據庫中的時間和日期,但我仍然無法獲得有效的查詢。從vb.net中的日期時間sql服務器類型操縱日期和時間

這裏有兩個代碼例子,我已經試過:

Dim Connection As SqlConnection = New SqlConnection(...) 
    Dim Command As SqlCommand = New SqlCommand() 
    Dim _Reader As SqlDataReader 
    Command.Connection = Connection 
    Command.CommandText = "Select ... from Auctions where Start_Date_Time > " & DateAndTime.Now & " And End_Date_Time > " & DateAndTime.Now 

藉助於此START_DATE_TIME和END_DATE_TIME是DateTime類型。

和:

Dim Connection As SqlConnection = New SqlConnection(...) 
    Dim Command As SqlCommand = New SqlCommand() 
    Dim _Reader As SqlDataReader 
    Command.Connection = Connection 
    Command.CommandText = "Select ... from Auctions where Start_Date >= " & Date.Today & "Start_Time <= " & DateAndTime.Now.ToLongTimeString & " And End_Date >= " & Date.Today & " And End_Time <= " & DateAndTime.Now.ToLongTimeString 

藉助於此START_DATE日期和結束日期是Date類型,並START_TIME和END_TIME的類型是時間(7)。

任何建議表示讚賞, 在此先感謝

+3

使用參數化查詢。不要按字符串傳遞日期和時間。你也可以考慮使用TSQL'getdate()'和'dateadd'函數,而不是根據當前時間傳遞參數。 –

+0

@Martin關於使用T-SQL值的唯一警告是服務器可能位於不同的時區。一旦英國數據中心的一個應用程序在弗吉尼亞州的數據庫中寫入數據,我們就遇到了一個問題,並且沒有人會同意該應用程序應該顯示的內容或應該存儲在數據庫中的內容。從那以後,我一直在爭取在UTC部署SQL和應用服務器,但如果應用程序需要應用服務器的日期/時間... –

回答

0

感謝您的建議傢伙。這是我的一個簡單的錯誤。我所需要做的就是將DateAndTime.Now放在逗號之間。

所以此代碼的工作:

Dim Connection As SqlConnection = New SqlConnection(...) 
Dim Command As SqlCommand = New SqlCommand() 
Dim _Reader As SqlDataReader 
Command.Connection = Connection 
Command.CommandText = "Select ... from Auctions where Start_Date_Time <= '" & DateAndTime.Now & "' And End_Date_Time >= '" & DateAndTime.Now & "'" 
+1

不要使用字符串連接。您的性能不僅會受到影響,還會讓您面臨SQL注入攻擊。改用參數化SQL。 –

+0

@Jim感謝您的建議,但這個網站永遠不會上線。這僅僅是爲了演示目的。 – Matt

0
dim myDateTime as Datetime = Now() 

... 

Select ... from Auctions where Start_Date_Time > " & myDateTime.ToShortTimeString() & ... 

http://msdn.microsoft.com/en-us/library/system.datetime.toshorttimestring.aspx

+0

OP正在使用[DateAndTime](http://msdn.microsoft.com/zh-cn/ us/library/1c24ezyz.aspx),而不是DateTime。 – Tim

+0

@Tim - 實際上,他使用的只是時間。他可以輕鬆使用DateTime。我不認爲他真的關心變量類型是什麼。但我會更新我的答案以澄清 - 謝謝。 – Chains

0

您是否嘗試過使用DateAndTime.TimeString Property

TimeString always returns the system time as "HH:mm:ss", which is a 24-hour format.因此,根據DateTime的時間部分如何存儲在數據庫中,您可能需要執行一些格式設置。

Dim Connection As SqlConnection = New SqlConnection(...) 
Dim Command As SqlCommand = New SqlCommand() 
Dim _Reader As SqlDataReader 
Command.Connection = Connection   
Command.CommandText = "Select ... from Auctions where Start_Date >= " & Date.Today & "Start_Time <= " & DateAndTime.TimeString & " And End_Date >= " & Date.Today & " And End_Time <= " & DateAndTime.TimeString