Member 12023878 Ответов: 1

Как я могу сопоставить отпечаток пальца ящура с базой данных mysql


Здравствуйте, извините за мой плохой английский. Я студент индонезийского SMK, который я хочу сделать системой управления для своей школы, я использовал U Are U от Digital Persona для системы посещаемости студентов, и я новичок на VB.Net interfacing with Digital Persona U Are U 4500 проблема в том, что я не знаю, в чем ошибка, и я не знаю, как десериализовать и сериализовать FMD в базу данных MySQL. Мой тип данных базы данных-LONGBLOB. Я использовал этот код для сериализации

cmd = New MySqlCommand("insert into finger_data(finger) values(@jari)", conn)
With cmd
   .Parameters.AddWithValue("@jari", Fmd.SerializeXml(resultConversion.Data))
   .ExecuteNonQuery()
End With


Когда я сохраняю сериализацию ящура в базе данных, это работа. И я не знаю, как Десериализоваться.

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

Я попробовал этот код для десериализации ящура из базы данных. И я получаю это сообщение об ошибке "необработанное исключение типа' System.IndexOutOfRangeException ' произошло в System.Data.dll

Дополнительная информация: в позиции 1 нет строки.

Это Мой Код Для Десериализации. Я пытался в течение долгих дней для этого... Так что любой может мне помочь, пожалуйста... Спасибо и раньше...

Public Sub OnCaptured(ByVal captureResult As CaptureResult)

        If Not _sender.CheckCaptureResult(captureResult) Then
            Return
        End If

        SendMessage(Action.SendMessage, "The Fingerprint Was Captured")

        Dim resultConversion As DataResult(Of Fmd) = FeatureExtraction.CreateFmdFromFid(captureResult.Data, Constants.Formats.Fmd.ANSI)
        If captureResult.ResultCode <> Constants.ResultCode.DP_SUCCESS Then
            _sender.Reset = True
            Throw New Exception(captureResult.ResultCode.ToString())
        End If

        If count = 0 Then

            firstFinger = resultConversion.Data
            count += 1
            SendMessage(Action.SendMessage, "Now place the same or a different finger on the reader.")

        ElseIf count = 1 Then

            secondFinger = resultConversion.Data
            count += 1
            SendMessage(Action.SendMessage, "Now place the same or a different finger on the reader.")

        ElseIf count = 2 Then

            AnyFinger = resultConversion.Data
            Dim fmds As Fmd() = New Fmd(1) {}
            fmds(0) = firstFinger
            fmds(1) = secondFinger

            Dim thresholdScore As Integer = PROBABILITY_ONE * 1 / 10000

            Dim ds As New DataSet
            adt = New MySqlDataAdapter("select * from finger_data where finger", conn)
            adt.Fill(ds, "finger_data")

            Dim A As Integer = ds.Tables("finger_data").Rows(1).Item(0) //I got Error on this Line
            Dim Y As Byte() = DirectCast(ds.Tables("finger_data").Rows(0).Item(2), Byte())
            Dim value As String = System.Text.Encoding.Unicode.GetString(Y)
            Dim X = Fmd.DeserializeXml(value)

            Dim identifyResult As IdentifyResult = Comparison.Identify(X, 0, fmds, thresholdScore, 2)
            If identifyResult.ResultCode <> Constants.ResultCode.DP_SUCCESS Then
                _sender.Reset = True
                Throw New Exception(identifyResult.ResultCode.ToString())
            End If

            SendMessage(Action.SendMessage, "Result Of The Identification " + identifyResult.Indexes.Length.ToString())
            SendMessage(Action.SendMessage, "Place Index")
            count = 0
        End If
    End Sub

1 Ответов

Рейтинг:
12

Richard Deeming

Сообщение об ошибке совершенно ясно - вы пытаетесь получить доступ ко второй строке таблицы, но в таблице нет двух строк. (Помните, что коллекции основаны на нуле, поэтому первая строка находится в индексе 0.)

Основываясь на следующей строке, вы хотите получить доступ к первый строка из таблицы, поэтому вам нужно изменить индекс строки на 0.

Однако вы также должны проверить, что запрос вернул строку, прежде чем пытаться получить к ней доступ.

adt.Fill(ds, "finger_data")

If ds.Tables("finger_data").Rows.Count = 0 Then
    ' No rows returned. Show an error message to the user here.
Else
    Dim A As Integer = ds.Tables("finger_data").Rows(0).Item(0)
    ...
End If