实现循环以检查数据

时间:2014-03-10 14:23:00

标签: c# sql sql-server web-services webmethod

我希望能够从数据库中检索模板(指纹),并将其与使用指纹识别器捕获的当前模板进行比较。我正在使用Web服务,但它无法正常工作。

public fgrTemplate StuVerifications(int ID)
        {
            cn.Open();
            SqlCommand com = new SqlCommand("SELECT Template FROM tblFingerprint WHERE ID = '" + ID + "'", cn);
            //com.Parameters.AddWithValue("ID", i);
            SqlDataReader sd = com.ExecuteReader();
            while (sd.Read())
            {
                fgrTemplate fingerprint = new fgrTemplate()
                {
                    ID = sd.GetInt32(0),
                    StudentID = sd.GetInt32(1),
                    Description = sd.GetString(2)
                    //Template = sd.GetByte(3)

                };
                cn.Close();
                return fingerprint;

            }

            cn.Close();
            return new fgrTemplate();

下面的代码与两个模板匹配

//3rd Step - Match against registered template


                    string[] fingerpos_str = new string[]
                                           {
                                              "Unknown finger",
                                              "Right thumb",
                                              "Right index finger",
                                              "Right middle finger",
                                              "Right ring finger",
                                              "Right little finger",
                                              "Left thumb",
                                              "Left index finger",
                                              "Left middle finger",
                                              "Left ring finger",
                                              "Left little finger"};

                    Int32 err;
                    SGFPMFingerPosition finger_pos = SGFPMFingerPosition.FINGPOS_UK;
                    bool finger_found = false;

                    SGFPMANSITemplateInfo sample_info = new SGFPMANSITemplateInfo();
                    foreach (fgrTemplate m_StoredTemplate in StudentVerifications(s.ID))


                    //err = m_FPM.GetAnsiTemplateInfo(m_StoredTemplate, sample_info);

                    for (int i = 0; i < sample_info.TotalSamples; i++)
                    {
                        bool matched = false;
                        err = m_FPM.MatchAnsiTemplate(m_StoredTemplate, i, m_VrfMin, 0, m_SecurityLevel, ref matched);
                        if (matched)
                        {
                            finger_found = true;
                            finger_pos = (SGFPMFingerPosition)sample_info.SampleInfo[i].FingerNumber;
                            // break;
                        }
                    }

                    if (err == (Int32)SGFPMError.ERROR_NONE)
                    {
                        if (finger_found)
                            richTextBox1.Text = "The matched data found. Finger position: " + fingerpos_str[(Int32)finger_pos];
                        else
                            richTextBox1.Text = "Cannot find a matched data";
                    }
                    else
                        richTextBox1.Text = "MatchAnsiTemplate() Error : " + err;

我希望能够检查数据库中的每一行,但是这样做有困难。在这种情况下如何实现for循环。

非常感谢

1 个答案:

答案 0 :(得分:0)

使用像这样的IEnumerable:

public IEnumerable<fgrTemplate> StuVerifications(int ID)
            {
                cn.Open();
                SqlCommand com = new SqlCommand("SELECT Template FROM tblFingerprint WHERE ID = '" + ID + "'", cn);
                //com.Parameters.AddWithValue("ID", i);
                SqlDataReader sd = com.ExecuteReader();
                while (sd.Read())
                {
                    fgrTemplate fingerprint = new fgrTemplate()
                    {
                        ID = sd.GetInt32(0),
                        StudentID = sd.GetInt32(1),
                        Description = sd.GetString(2)
                        //Template = sd.GetByte(3)

                    };
                    yield return fingerprint;

                }

                cn.Close();

这将返回一个fgrTemplates的集合(每行一个),然后你可以预告它。

然后通过每个模板做这样的事情(注意我猜你想循环这个方法是如何工作的,所以这可能不完全正确):

foreach(fgrTemplate t in StuVerifications(ID))
{
err = m_FPM.MatchAnsiTemplate(t, i, m_VrfMin, 0, m_SecurityLevel, ref matched);
if (matched)
      display student name
  else
      error message
}