DigitalPersona для Griaule (GrFingerX) или наоборот - PullRequest
0 голосов
/ 08 марта 2019

Задача : у меня есть 30 000 записей отпечатков пальцев в базе данных SQL Server, которая имеет тип данных binary(2000), и она была зарегистрирована до выпуска DigitalPersona SDK.

Я разрабатывал приложение на C # с использованием Griaule (GrFinger) SDK. Я использую Griaule SDK, потому что 5 лет назад я уже разработал приложение, использующее VB6, и у меня нет никаких проблем с ним, я быстро набираю данные, используя 1: N, но теперь я не знаю, как сравнивать или преобразовывать шаблон с использованием GrFinger для записи DigitalPersona. Я новичок в C #, поэтому я надеялся на ваше понимание, если у меня могут быть некоторые разъяснения, когда дело доходит до C #.

Как мне решить эту проблему?

Скриншот :

Screenshot

Код

    public int Identify(ref int score, string sqlQuery)
    {
        GRConstants result;
        int id;
        OleDbDataReader rs;
        TTemplate tptRef;
        // Checking if template is valid.
        if (!TemplateIsValid()) return ERR_INVALID_TEMPLATE;
        // Starting identification process and supplying query template.
        result = (GRConstants)_grfingerx.IdentifyPrepare(ref _tpt._tpt,(int)GRConstants.GR_DEFAULT_CONTEXT);
        // error?
        if (result < 0) return (int)result;
        // Getting enrolled templates from database.
        rs = _DB.getTemplates(sqlQuery);// query source is "select EmployeeFingerPrint,EmployeeID from RegFingers"
        while (rs.Read())
        {
            // Getting current template from recordset.
            tptRef = _DB.getTemplate(rs);
            // Comparing current template.
            result = (GRConstants)_grfingerx.Identify(ref tptRef._tpt,ref score, (int)GRConstants.GR_DEFAULT_CONTEXT);
            // Checking if query template and the reference template match.
            if (result == GRConstants.GR_MATCH)
            {
                id = _DB.getId(rs);
                rs.Close();
                return id;
            }
            else if (result < 0)
            {
                rs.Close();
                return (int)result;
            }
        }
        // Closing recordset.
        rs.Close();
        return (int)GRConstants.GR_NOT_MATCH;
    }
   // Returns an OleDbDataReader with all enrolled templates from database.
    public OleDbDataReader getTemplates(string sqlQuery)
    {
        OleDbCommand cmdGetTemplates;
        OleDbDataReader rs;
        //setting up command
        cmdGetTemplates = new OleDbCommand(sqlQuery, _connection);
        rs = cmdGetTemplates.ExecuteReader();
        return rs;
    }
    // Return template data from an OleDbDataReader
    public TTemplate getTemplate(OleDbDataReader rs)
    {
        long readedBytes;
        tptBlob._size = 0;
        Byte[] temp = new Byte[(int)GRConstants.GR_MAX_SIZE_TEMPLATE];// alloc space
        readedBytes = rs.GetBytes(0, 0, temp, 0, (int)temp.Length);// get bytes
        Array.Copy(temp, 0, tptBlob._tpt, 0, (int)readedBytes);// copy to structure
        tptBlob._size = (int)readedBytes;// set real size
        return tptBlob;
    }
...