KingDolly Ответов: 1

Вернуть строку данных в оператора выбрать


Я разрабатываю систему регистрации отпечатков пальцев студентов в vb. Я использую digital persona u.r.u4500 с onetouch sdk. До сих пор мне удавалось сохранять отпечаток пальца в mysql и проводить верификацию. Теперь я застрял в том, как получить идентификатор студента из базы данных, когда отпечаток пальца будет проверен. Эта ошибка возникает после завершения проверки

Исключение типа 'System.IndexOutOfRangeException' произошло в System.Data.dll но не была обработана в пользовательском коде дополнительная информация: в позиции 0 нет строки. Ошибка возникает в этой строке

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

Как я могу выполнить проверку.

Private Sub verifyControl_OnComplete(ByVal Control As Object, ByVal FeatureSet As DPFP.FeatureSet, ByRef EventHandlerStatus As DPFP.Gui.EventHandlerStatus) Handles verifyControl.OnComplete

        Try

        cn.Open()
        sqlCommand.CommandText = "Select * from student"
        sqlCommand.CommandType = CommandType.Text
        sqlCommand.Connection = cn
        Dim lrd As MySqlDataReader = sqlCommand.ExecuteReader()

        While lrd.Read()
            usr = lrd("print")

        End While
        lrd.Dispose()
        bytes = Nothing
        bytes = usr
        template = New DPFP.Template()
        template.DeSerialize(usr)
        'Perform match
        matcher.Verify(FeatureSet, template, matchResult)
        If matchResult.Verified Then
            EventHandlerStatus = Gui.EventHandlerStatus.Success

            MessageBox.Show("Verified!, Fingerprint exist in database")
I suspect the fault to be from this block

            sqlCommand.CommandText = " select StudentID from student  where 
            print like '%template%' "

            Dim publictable As New DataTable
            Try

                adapter.SelectCommand = sqlCommand

                adapter.Fill(publictable)
                txtstudentID.Text = publictable.Rows(0).Item(1)
            Finally


                adapter.Dispose()
                cn.Close()
            End Try


Я передаю переменную в оператор mysql. Теперь переменная находится в коде, а не в базе данных, поэтому запрос к ней не вернет никаких результатов, которые я сейчас получаю. Есть ли способ использовать оператор select для запроса mysql для получения studentID, связанного с шаблоном отпечатка пальца в базе данных(BLOB).

Richard MacCutchan

Индекс вне диапазона указывает на то, что запись не была найдена - то, что вы всегда должны проверять. И вероятность того, что два отпечатка пальцев будут точно такими же, очень мала. Скорее всего, вам нужно будет прочитать каждое изображение и сделать какой-то анализ, чтобы проверить, какое из них соответствует. Документация устройства должна содержать информацию о том, как это сделать.

A_Griffin

Как сказал Ричард выше - никаких записей не найдено. Кроме того, если все, что вам нужно, - это StudentID, то, если это целое число, считывать его в DataTable несколько расточительно-простой ExecuteScalar будет считывать его в целочисленную (или двойную) переменную, хотя опять же вы должны проверить, что ничего не возвращается.

1 Ответов

Рейтинг:
2

David A. Gray

Я подозреваю, что вам нужна хранимая процедура для загрузки данных и возврата идентификатора строки, которую она вставляет. То, вы хотели ExecuteNonQuery, и получить идентификатор в целое число в вашем приложении VB. В Microsoft SQL Server это значение возвращается функцией Scope_Identity (). Я уверен, что у MySQL есть что-то эквивалентное, хотя, поскольку я гораздо лучше знаком с Microsoft SQL Server, чем с MySQL, я не знаю, что такое эквивалентная функция. Далее, вы бы сделали Select * from student where id = InsertResult, где InsertResult это имя переменной VB, которая получает результат, возвращаемыйExecuteNonQuery.