Цикл Foreach следует только за первой строкой таблицы данных в SQL Server в C # для проверки отпечатка пальца - PullRequest
0 голосов
/ 29 сентября 2018

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

Это мой код:

protected override void Process(DPFP.Sample Sample)
{
    con.Open();

    SqlCommand cmd = new SqlCommand("SELECT *FROM EmpRegistration", con);

    SqlDataAdapter sda = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    sda.Fill(dt);

    if (dt.Rows.Count > 0)
    {
        foreach (DataRow dr in dt.Rows)
        {
            byte[] _img_ = (byte[])dr["Finger"];
            MemoryStream ms = new MemoryStream(_img_);
            DPFP.Template Template = new DPFP.Template();
            Template.DeSerialize(ms);

            DPFP.Verification.Verification Verificator = new DPFP.Verification.Verification();

            con.Close();

            base.Process(Sample);

            // Process the sample and create a feature set for the enrollment purpose.
            DPFP.FeatureSet features = ExtractFeatures(Sample, DPFP.Processing.DataPurpose.Verification);

            // Check quality of the sample and start verification if it's good
            // TODO: move to a separate task
            if (features != null)
            {
                // Compare the feature set with our template
                DPFP.Verification.Verification.Result result = new DPFP.Verification.Verification.Result();
                Verificator.Verify(features, Template, ref result);
                UpdateStatus(result.FARAchieved);

                if (result.Verified)
                {
                    MakeReport("Verified");

                    try
                    {
                        con.Open();

                        SqlDataReader myReader = null;

                        SqlCommand myCommand = new SqlCommand("select * from EmpRegistration", con);

                        myReader = myCommand.ExecuteReader();

                        while (myReader.Read())
                        {
                            txtname.Text = myReader["EmpName"].ToString();
                            txtcnic.Text = myReader["CNIC"].ToString();
                        }

                        con.Close();
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.ToString());
                    }

                    break;
                }
                else if (result.Verified == false)
                {
                    MakeReport("Employee not registered");
                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 29 сентября 2018

На самом деле он проходит через все записи, но после окончания цикла вы просто десериализируете последнюю запись.

После десериализации каждой записи вы должны использовать Валидатор, чтобы проверить правильность отпечатка пальца.

Посмотрите Как проверить шаблон отпечатков пальцев с помощью SQL Server

...