Мне нужна помощь, как получить 3 месяца до даты истечения срока действия оповещения. Я использовал MySQL.
Try
Call connection()
cmd.CommandText = "select * from medicine where expiry_date < date_sub(now(), interval 3 month)"
dr = cmd.ExecuteReader
count = 0
While dr.Read
count = count + 1
End While
If count = 1 Then
pop.Image = Image.FromFile("E:\asasda.png")
pop.TitleText = "Notification Alert!!!"
pop.ContentText = "Medicine at Risk"
pop.AnimationDuration = 3000
pop.Popup()
Else
pop.Image = Image.FromFile("E:\asasda.png")
pop.TitleText = "Notification Alert!!!"
pop.ContentText = "No items for risk"
pop.AnimationDuration = 3000
pop.Popup()
End If
Catch ex As Exception
End Try
Я прокомментировал наше Call Connection()
. Лучше всего, чтобы ваши соединения были локальными, чтобы вы могли быть уверены, что они закрыты и удалены.
A Using...End Using
блок выполнит это, даже если есть ошибка. Также я не вижу, где вы связали соединение с вашей командой. В этом случае ключевое слово call не обязательно. Я предполагаю, что Connection() возвращает соединение, но вы не предоставили переменную для хранения соединения.
Передайте оператор Select
и соединение непосредственно в конструктор команды.
Вы использовали все данные, которые вы вернули в цикле. Если вам нужно только лишь граф затем попросить Count
и использовать .ExecuteScalar
.
Я не вижу смысла в If, потому что часть if идентична части else.
Пустой Catch просто проглатывает ошибки. Плохая идея.
Private Sub OPCode()
Dim CountReturned As Integer
Try
'Call Connection()
Using cn As New MySqlConnection("Your connection string")
Using cmd As New MySqlCommand("select Count(*) from medicine where expiry_date < date_sub(now(), interval 3 month);", cn)
cn.Open()
CountReturned = CInt(cmd.ExecuteScalar)
End Using
End Using
If CountReturned = 1 Then
pop.Image = Image.FromFile("E:\asasda.png")
pop.TitleText = "Notification Alert!!!"
pop.ContentText = "Medicine at Risk"
pop.AnimationDuration = 3000
pop.Popup()
Else
pop.Image = Image.FromFile("E:\asasda.png")
pop.TitleText = "Notification Alert!!!"
pop.ContentText = "No items for risk"
pop.AnimationDuration = 3000
pop.Popup()
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Если вы не можете data_sub
работать MySql data_sub
используйте vb и параметры.
Using cmd As New MySqlCommand("select Count(*) from medicine where expiry_date < @Minus3Months;", cn)
cmd.Parameters.Add("@Minus3Months", MySqlDbType.DateTime).Value = Now.AddMonths(-3)
If
. Все это может быть уменьшено до: pop.ContentText = If(CountReturned = 1, "Medicine at Risk", "No items for risk")
.
cmd.CommandText = "select * from medicine where expiry_date < @threeMonthsAgo"
cmd.parameters.add("@threeMonthsAgo", variableWithYourDate)
Вы можете передать значение из VB, используя параметры.
If count = 1 Then
заставляет его сказать"No items for risk"
если нет только одного предмета. Это было твоё намерение?