2017-02-20 82 views
0
Dim readers As MySqlDataReader 

    cn.Open() 
    Dim query As String 
    query = "Select * from tblmeds where expdate='" & DateTime.Now & "'" 
    command = New MySqlCommand(query, cn) 
    readers = command.ExecuteReader 

    Dim count As Integer 
    count = 0 
    While readers.Read 
     count = count + 1 
    End While 

     cn.Close() 

     If count = 0 Then 

      MsgBox("no expiration") 
     Else 
      MsgBox("medicine at risk") 
     End If 

這只是我做的代碼,但它不工作,因爲它不去,而是直接去如果計數= 0。我怎麼能對我的程序說「如果數據庫上的過期日期接近我設定的月份」對不起,因爲我的英文不好如何計算到期日期VB.NET

+0

DateTime.Now還包含小時,分鐘和秒。你正在檢查你的任何物品是否有這個值。你是否想用<=? – Steve

+0

嗯在我的數據庫我只有確切的日期到期日期沒有時間。我該如何檢查日期?我應該使用什麼? – VAN

回答

0

爲什麼不使用時間戳差異:

query = "Select * from tblmeds where TIMESTAMPDIFF(MONTH,`expdate`,CURRENT_TIMESTAMP())< 1" 
+0

耶穌基督它的作品omg謝謝!順便說一句,我需要你的幫助了 – VAN

2

您正在檢查您的任何項目是否有到期日正好等於當前值DateTime.Now。這個屬性也包含時間部分,因此你有一個具有完全相同值的項目是非常不可能的。

我想你會用,而不是「EXPDATE比現在更小」,從而你的代碼應該是

Dim readers As MySqlDataReader 
cn.Open() 
Dim query As String 
query = "Select * from tblmeds where expdate<[email protected]" 
command = New MySqlCommand(query, cn) 
command.Parameters.Add("@exp", MySqlDbType.DateTime).Value = DateTime.Now; 
readers = command.ExecuteReader 
Dim count As Integer 
count = 0 
While readers.Read 
    count = count + 1 
End While 
cn.Close() 
If count = 0 Then 
    MsgBox("no expiration") 
Else 
    MsgBox("medicine at risk") 
End If 

相反,如果你想檢查有效日期等於今天日期,那麼使用表達式而不是DateTime.Today DateTime.Now。

注意,這是一個非常好的做法,永遠不要連接字符串來形成sql查詢。始終使用參數方法來避免解析和轉換錯誤。

+0

它的作品也謝謝你! – VAN

+0

^1用於避免使用查詢參數進行SQL注入攻擊。 – Stavr00