Эта ошибка указывает, что содержимое переменной myValue равно нулю. Если оно пустое, вы не можете использовать свойство Length (или любое другое свойство в этом отношении) для него. Вы должны проверить на ноль явно:
If myValue IsNot Nothing Then
РЕДАКТИРОВАТЬ 1
Ваш SQL-запрос неверен. Я не знаю, какой будет правильный запрос, поскольку я не знаю вашу базу данных, но я думаю, что вы намереваетесь написать это:
Dim mySelect As New OleDbCommand("SELECT prefix, course_number FROM tableCourse WHERE prefix=" + checfkPreix + " AND course_number=" + checkNum, myConn)
или что-то на этот счет. Возможно, вы захотите использовать string.Format функцию для формирования строки. И вам также необходимо убедиться, что существует какая-то защита от SQL-инъекции , поскольку вы формируете свой запрос из пользовательского ввода. В вашем случае целесообразно использовать OleDbParameter .
Редактировать 2
Вы также вправе упомянуть, что может быть проблема с ExecuteScalar. ExecuteScalar должен возвращать одно значение, а ваш запрос на выборку возвращает два (префикс и номер_курса). Измените его так, чтобы он возвращал один параметр SELECT prefix FROM
или просто SELECT 1 FROM
, а затем оставшуюся часть запроса:
Dim mySelect As New OleDbCommand("SELECT 1 FROM tableCourse WHERE prefix=? AND course_number=?", myConn)
mySelect.Parameters.AddWithValue("@checkPrefix", checkPrefix)
mySelect.Parameters.AddWithValue("@checkNum", checkNum)
Редактировать 3
Вы неправильно настраиваете неудачную проверку в вашем валидаторе.
Добавить
args.IsValid = False
внутри вашего оператора if.