Я хочу, чтобы datareader считывал данные из столбца в базе данных, которая является varchar, и результат чтения должен быть сохранен в строковой переменной - PullRequest
0 голосов
/ 16 августа 2011

Я хочу, чтобы datareader считывал данные из столбца в базе данных, которая является varchar, и результат чтения должен быть сохранен в строковой переменной, но он генерирует исключение indexoutofrange ... В основном я хочу проверку, чтобы, если пользователь вводит время бронирования который уже находится в базе данных, то программа должна сгенерировать сообщение об ошибке. Также должна быть сгенерирована ошибка, если введенное значение находится в пределах заданного времени. Например, если бронирование производится 12.12.2011 в 16:00, а продолжительность составляет 2 часа, то программа не должна разрешать бронирование до 18:00, если только бронирование не для другой игры или для какого-либо другого суда ( в случае бадминтона, сквоша, большого тенниса и т. д.)

Я пытаюсь следующий код для этого:

Dim str2 As String 'определяет строковую переменную для получения запроса на выборку

    str2 = "select booking_date, booking_time, booking_duration, poolno, courtno, tableno from Bookings"

    Dim a, b As Date
    Dim c As Date
    Dim d, f, g, l As String

    Dim dur As Integer

    Dim cmd2 As New SqlCommand(str2, con)
    con.Open()

    Dim bookchk As SqlDataReader = cmd2.ExecuteReader
    While bookchk.Read()
        a = bookchk("booking_date")
        b = bookchk("booking_time")
        c = b.ToLongTimeString
        dur = bookchk("booking_duration")

        l = bookchk("game") 'exception is generated here


        If CmboGame.SelectedItem = "Swimming" Then
            If bookchk("poolno") IsNot System.DBNull.Value Then
                d = bookchk("poolno")

            End If

        Else : d = ""

        End If

        If CmboGame.SelectedItem = "Table Tennis" Then
            If bookchk("tableno") IsNot System.DBNull.Value Then
                f = bookchk("tableno")

            End If
        Else : f = ""
        End If
        If CmboGame.SelectedItem IsNot "Table Tennis" And CmboGame.SelectedItem IsNot "Swimming" Then
            If bookchk("courtno") IsNot System.DBNull.Value Then
                g = bookchk("courtno")

            End If
        Else : g = ""
        End If
        If TxtBookDate.Text = a And TxtBookTime.Text = c And TxtPoolNo.Text = d And TxtCrtNo.Text = g And TxtTblNo.Text = f And CmboGame.SelectedItem = l Then
            MessageBox.Show("The date and time you have entered has already been booked" & vbCrLf & "Try Again!", "Bookings Overlapped", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            Exit Sub

        End If


        Dim time, h, i, j, n As DateTime
        n = c.AddHours(dur)
        time = TxtBookTime.Text
        h = time.AddHours(TxtBookDur.Text)
        i = time.ToLongTimeString
        j = h.ToLongTimeString


        If TxtBookDate.Text = a And TxtPoolNo.Text = d And TxtCrtNo.Text = g And TxtTblNo.Text = f And CmboGame.SelectedIndex = l And i > c And i <= n Or j > n Then
            MessageBox.Show("The date and time you have entered has already been booked" & vbCrLf & "Try Again!", "Bookings Overlapped", MessageBoxButtons.OK, MessageBoxIcon.Stop)

            Exit Sub

        End If


    End While
    bookchk.Close()
    con.Close()

1 Ответ

0 голосов
/ 16 августа 2011

Ваш оператор SQL:

str2 = "select booking_date, booking_time, booking_duration, poolno, courtno, tableno from Bookings"

Вы не выбираете столбец под названием "игра", поэтому, очевидно, вы не можете ссылаться на это в своем хранилище данных. Добавьте столбец «game» в оператор SQL, если он существует, эта проблема исчезнет. Конечно, у вас могут быть и другие проблемы.

...