我希望能够从数据库中检索模板(指纹),并将其与使用指纹识别器捕获的当前模板进行比较。我正在使用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循环。
非常感谢
答案 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
}