任务:我在一个SQL Server数据库中拥有30,000个指纹记录,该数据库是binary(2000)
数据类型,并且在使用DigitalPersona SDK之前已经注册。
我正在使用Griaule(GrFinger)SDK用C#开发应用程序。我使用Griaule SDK是因为5年前我已经使用VB6开发了一个应用程序,但是我没有任何问题,可以使用1:N来加快获取数据的速度,但是现在我不知道如何比较或转换模板使用GrFinger进行DigitalPersona记录。我是C#的新手,所以我希望您能理解C#。
我该如何解决这个问题?
屏幕截图:
代码:
public int Identify(ref int score, string sqlQuery)
{
GRConstants result;
int id;
OleDbDataReader rs;
TTemplate tptRef;
// Checking if template is valid.
if (!TemplateIsValid()) return ERR_INVALID_TEMPLATE;
// Starting identification process and supplying query template.
result = (GRConstants)_grfingerx.IdentifyPrepare(ref _tpt._tpt,(int)GRConstants.GR_DEFAULT_CONTEXT);
// error?
if (result < 0) return (int)result;
// Getting enrolled templates from database.
rs = _DB.getTemplates(sqlQuery);// query source is "select EmployeeFingerPrint,EmployeeID from RegFingers"
while (rs.Read())
{
// Getting current template from recordset.
tptRef = _DB.getTemplate(rs);
// Comparing current template.
result = (GRConstants)_grfingerx.Identify(ref tptRef._tpt,ref score, (int)GRConstants.GR_DEFAULT_CONTEXT);
// Checking if query template and the reference template match.
if (result == GRConstants.GR_MATCH)
{
id = _DB.getId(rs);
rs.Close();
return id;
}
else if (result < 0)
{
rs.Close();
return (int)result;
}
}
// Closing recordset.
rs.Close();
return (int)GRConstants.GR_NOT_MATCH;
}
// Returns an OleDbDataReader with all enrolled templates from database.
public OleDbDataReader getTemplates(string sqlQuery)
{
OleDbCommand cmdGetTemplates;
OleDbDataReader rs;
//setting up command
cmdGetTemplates = new OleDbCommand(sqlQuery, _connection);
rs = cmdGetTemplates.ExecuteReader();
return rs;
}
// Return template data from an OleDbDataReader
public TTemplate getTemplate(OleDbDataReader rs)
{
long readedBytes;
tptBlob._size = 0;
Byte[] temp = new Byte[(int)GRConstants.GR_MAX_SIZE_TEMPLATE];// alloc space
readedBytes = rs.GetBytes(0, 0, temp, 0, (int)temp.Length);// get bytes
Array.Copy(temp, 0, tptBlob._tpt, 0, (int)readedBytes);// copy to structure
tptBlob._size = (int)readedBytes;// set real size
return tptBlob;
}