2017-02-20 81 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