-1

That is my first question here I am currently working on an project Biometric attendance system and I am stuck at the place the fingerprints are saved in the database and when I retrieve fingerprints for verification and it retrieves only first record not others rows of datatable please help me in this regard.

This is my code:

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");
                }
            }
        }
    }
}
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459

1 Answers1

0

It actually goes through all records, but after the loop ends you just have the last record deserialized.

After Deserializing each record, you must use a Validator to check the validity of the finger print.

Have a look at How to verify Finger print template with the SQL Server

Ashkan Mobayen Khiabani
  • 33,575
  • 33
  • 102
  • 171
  • if it has only one record then it works fine but when there is multiple records in table then it retrieve only last record CNIC Name but at it runs else part of the loop. – Zahid Maqsood Sep 29 '18 at 08:14