Jamie888 Ответов: 1

Индекс вне диапазона после выполнения SQL


Привет, у меня есть встроенный запрос SELECT statement, написанный на VB. Когда я пытаюсь запустить его, он выдает мне сообщение об ошибке IndexOutOfRangeException. Я попытался отладить его и обнаружил сообщение об ошибке после ExecuteReader ().
Сначала я подумал, что это связано с тем, что мое возвращаемое значение равно NULL, но ошибка все еще сохраняется после того, как я добавил IsDBNull в свои коды.
Ниже приведены мои коды:

Try
    cnSql = New SqlConnection(SQL_CONNECTION_STRING)
    cnSql.Open()

    strSQL = "SELECT ISNULL(MIN(SH.shipping_start_date), GETDATE()) AS StartDate "
    strSQL = strSQL + "FROM Shipping AS SH INNER JOIN Working AS WK ON SH.shipping_id = WK.shipping_id "
    strSQL = strSQL + "WHERE WK.woNo = '" + number + "'"

    cmSql = New SqlCommand(strSQL, cnSql)
    readerSQL = cmSql.ExecuteReader()

    If readerSQL.Read() Then
        If Not IsDBNull(readerSQL.Item("shipping_start_date")) Then
            woStartDate = readerSQL.Item("shipping_start_date")
        End If
    Else
        ShipStartDate = DateTime.Now
    End If


    readerSQL.Close()
    cnSql.Close()
    cmSql.Dispose()
    cnSql.Dispose()

Catch ex As SqlException
    MsgBox(ex.Message, MsgBoxStyle.Critical, "SQL Error!")

Catch ex As Exception
    MsgBox(ex.Message, MsgBoxStyle.Critical, "General Error!")'error happen here


Что я уже пробовал:

1. Добавлено IsDBNull в мои коды, чтобы отфильтровать нулевые значения, возвращаемого из БД.
2. попытался выполнить запрос непосредственно в SQL Server без каких-либо ошибок.

ChauhanAjay

Измените код с
Если нет IsDBNull(readerSQL. Item ("shipping_start_date")) Затем
woStartDate = readerSQL. Item ("shipping_start_date")
Конец, Если
к

Если нет IsDBNull(readerSQL. Item ("StartDate")) Затем
woStartDate = readerSQL. Item ("StartDate")
Конец, Если

Jamie888

Да, сэр, спасибо за ваш совет, это действительно та самая "shipping_start_date", которая вызвала ошибку. Спасибо.

ChauhanAjay

Добро пожаловать

1 Ответов

Рейтинг:
5

Patrice T

Я не эксперт по SQL, но похоже, что возвращаемый столбец имеет имя StartDate а ты проверь shipping_start_date в вашем коде.


Jamie888

Да, сэр! Абсолютно! Как же я это пропустил, спасибо за совет, теперь вопрос решен. Спасибо.

Patrice T

Вы приветствуете.