Вернуть строку данных в оператора выбрать
Я разрабатываю систему регистрации отпечатков пальцев студентов в 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 будет считывать его в целочисленную (или двойную) переменную, хотя опять же вы должны проверить, что ничего не возвращается.