We help IT Professionals succeed at work.

How to compare values from database with a current date

avi4 asked
Medium Priority
Last Modified: 2012-05-05

I have a form with a button that when the user clicks on a button it should check - if a report already exist or not.
If it exists it should show a message telling the user that report already exist or display another message telling the user to enter data for a new report and then inserting default values like 0.

Could someone please looks at my code because I am not sure what I am doing wrong.

Public Sub btnInsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInsert.Click

        Dim strConnString As String = "server=***;database=***;uid=***;pwd=***"
        Dim objConn As New SqlConnection(strConnString)
        Dim strInsert As New SqlCommand
        Dim TodayDate As DateTime = DateTime.Now

        Dim strSQL As String
        strSQL = "SELECT * FROM StudentsTable WHERE ReportDate >= DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)"

        Dim cmd As New SqlCommand(strSQL, objConn)
        Dim reader As SqlDataReader
        reader = cmd.ExecuteReader

        While (reader.Read())
            If (String.Compare(reader.Itme("ReportDate").ToString(), TodayDate)  = 0) Then  

                MessageBox("Report for this date already exists." & _


            ElseIf (String.Compare(reader.Item("ReportDate").ToString, TodayDate) < 0) Then

                strInsert.CommandText = "Insert StudentsTable(ReportName, ReportDate, ClassA, ClassB, ClassC, CFlag) " & _

                strInsert.Connection = objConn

                MessageBox("Enter data for a new report." & _

            End If
          End While

    End Sub
Watch Question

If (String.Compare(reader.Itme("ReportDate").ToString(), TodayDate)  = 0) Then  

Typo  ''' Itme "" 
It seems to me that the StudentsTable contains only one record (or none) record for each ReportDate.  If that is true, your loop may be doing the job right.

Because you first selected all records with ReportDate >= current date, i.e. records with current ReportDate and future ReportDate

In the first If, you checked if the ReportDate equals the current date.  If it does, you pop a message but the loop continues.  That means any records with a future ReportDate will get executed in the ElseIf part and you insert a new record for each row with a future ReportDate.

Perphaps you can try a better way of doing this.

        Dim strSQL As String
        strSQL = String.Format("SELECT ReportName FROM StudentsTable WHERE ReportDate = '{0:dd MMM yyyy}'", DateTime.Today)

        Dim cmd As New System.Data.SqlClient.SqlCommand(strSQL, objConn)
        Dim obj As Object = cmd.ExecuteScalar()
         If (obj = vbNull) Then
            'insert new report here
            'report alreay exist, show your message
        End If

Hope that helps

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts


Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.


Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.