-->

Foreach loop follow only first row of data table i

2019-09-20 03:57发布

问题:

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");
                }
            }
        }
    }
}

回答1:

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