Я работаю над созданием службы Windows, которая будет отправлять электронные письма клиенту, когда срок его отправки истекает в течение месяца. Я использую vb.net в Visual Studios 2008
Поскольку это служба Windows, ее очень сложно отлаживать. Пытаясь сузить свою ошибку, я создал метод sendDebugEmail, который отправляет мне электронное письмо, если оно попадает на определенную строку. Письма никогда не проходят мимо "dr = cmd.ExecuteReader ()"
Мне интересно, что я делаю не так. Мой оператор SQL должен работать нормально. Я проверил это в своей базе данных SQL-сервера.
Я создал базу данных dummy_database, которую я только что создал на сервере sql. Я добавил оператор INSERT sql для фиктивной таблицы, которая у меня есть, просто чтобы посмотреть, смогу ли я получить доступ к базе данных. Все, что принимает таблица, это номер строки и время ее отправки. Когда я запускаю службу Windows, база данных обновляется очень хорошо.
Любая помощь будет оценена. Спасибо
Dim conn As New SqlConnection(connString2)
sendDebugEmail("134")
SQL = "Select email FROM _Customer WHERE custID in (SELECT custID FROM _OnlineCustomer WHERE ExpirationDate <= '6-20-12' AND ExpirationDate >= '6-10-12')"
Dim cmd As New SqlCommand(SQL, conn)
sSubject = "hello"
sBody = "This is test data"
Dim dr As SqlDataReader
sendDebugEmail("143")
Try
dr = cmd.ExecuteReader() // This is were it stops
sendDebugEmail("147")
While dr.Read
sendDebugEmail("152")
Try
LogInfo("Service woke up")
Dim i As Integer = 0
' Prepare e-mail fields
sFrom = "test@gmail.com"
sTo = "test1@gmail.com"
sCc = "test2@gmail.com"
Dim oMailMsg As MailMessage = New MailMessage
oMailMsg.From = sFrom
oMailMsg.To = sTo
oMailMsg.Cc = sCc
' Call a stored procedure to process the current item
' The success message
oMailMsg.Subject = sSubject + "(Success)"
oMailMsg.Body = sBody + "Email has been sent successfully."
' Send the message
If Not (oMailMsg.To = String.Empty) Then
SmtpMail.Send(oMailMsg)
End If
Catch obug As Exception
LogEvent(obug.Message)
Finally
End Try
End While
Catch ex As Exception
Finally
dr.Close()
cmd.Dispose()
conn.Close()
conn.Dispose()
End Try
End Sub
/////////////////////////////////////////////// //////////////////////////////////
Проблема решена: Я установил соединение, но никогда не открывал его.
Мне нужно conn.open ()
Больше всего мне помогло добавление этого кода в мой последний оператор catch:
sendDebugEmail(ex.Message & vbcrlf & ex.stackTrace)
Он отправил мне электронное письмо от stackTrace и упростил отладку