Array
(
)

Método IndexSearch Leitor Biométrico NitGen Fingertech Hamaster DX I

Thiago Neves
   - 21 mar 2014

Olá Pessoal! Estou desenvolvendo um programinha em C# usando biometria, um leitor da NitGen FingerTech Hamaster DX I Gostaria de pedir ajuda de vocês.
A minha principal dúvida é em relação o método IndexSearch / NSearch, O material que a Nitgen disponibiliza da uma visão superficial pra que é iniciante, no meu ponto de vista é muito confuso e sem detalhes os materiais, apenas dão uma pincelada na lógica + ou - de cada linguagem.
A Lógica do método IndexSearch eu acho que entendi, inclusive já estou fazendo o cadastro levando para minha base dados em SQL o ID da pessoa e o TEMPLATE FIR no formato TEXTO.
Pelo que eu entendi, o leitor tem um banco de dados interno na memória não volátil dele, ou seja mesmo eu desligando o dispositivo ele manterá salvo as informações, correto? No caso quando eu cadastro um template eu tenho que passar para o leitor através do método IndexSearch.AddFIR(szFir, nUserID), os dois parâmetros, o Template no formato TEXTO é o ID da pessoa, quando for fazer uma identificação da pessoa através da digital, o leitor consultara no banco interno dele o FIR no caso a digital e retornará apenas o ID da pessoa, com esse ID eu vou no banco SQL e trago o que eu quiser desse cliente, isso que torna a busca praticamente instantânea diante de muitos cadastros.
Não estou conseguindo carregar na memória os dados do banco usando C# e SQL, abaixo o exemplo dado pelo fabricante para C#.
No caso toda vez que eu abrir meu programinha eu vou ter que carregar os dados novamente na memória? Penso que não
pois quando gravo um novo template eu add ao mesmo tempo no banco do leitor quanto na minha base de dados sql o ID e o FIR da pessoa.
Abaixo um exemplo que segundo o fabricante é em C#, só que eu não estou conseguindo fazer o método abaixo usando o VisualStudio com o SQL. A questão da comunicação com o banco está perfeito, a instrução SQL é SELECT szFIR, nUserID FROM tbCliente.
int nUserID Long //ID do User.
string szFir //Template do User
rs = connObj.OpenSchema(ADODB.SchemaEnum.adSchemaTables, Missing.Value, Missing.Value);
while(!rs.EOF)
{
nUserID = rs.Fields["ID"].Value.ToInteger();
szFIR = rs.Fields["ID"].Value.ToString();
objIndexSearch.AddFIR(szFir, nUserID);
rs.MoveNext();
}
Agora um exemplo do programa como os códigos fontes que o fabricante disponibiliza:
NBioAPI.Type.HFIR hNewFIR; //Cria uma nova FIR
uint nUserID = 0;
// Get User ID
try
{ int test = Convert.ToInt32(textUserID.Text, 10);
if (test == 0)
throw(new Exception());
}
catch
{
MessageBox.Show("User ID must be have numeric type and greater than 0.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
nUserID = Convert.ToUInt32(textUserID.Text, 10);
// Get FIR data
m_NBioAPI.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO);
uint ret = m_NBioAPI.Enroll(out hNewFIR, null); //Extrai a Digital lida e armazena em hNewFIR
if (ret != NBioAPI.Error.NONE)
{
DisplayErrorMsg(ret);
m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);
return;
}

m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);

// Regist FIR to IndexSearch DB
NBioAPI.IndexSearch.FP_INFO[] fpInfo;
ret = m_IndexSearch.AddFIR(hNewFIR, nUserID, out fpInfo); //Aqui adiciona no Leitor a digital lida (FIR) mais o ID do cliente.
if (ret != NBioAPI.Error.NONE)
{
DisplayErrorMsg(ret);
return;
}

// Add item to list of SearchDB
foreach (NBioAPI.IndexSearch.FP_INFO sampleInfo in fpInfo)
{
ListViewItem listItem = new ListViewItem();
listItem.Text = sampleInfo.ID.ToString();
listItem.SubItems.Add(sampleInfo.FingerID.ToString());
listItem.SubItems.Add(sampleInfo.SampleNumber.ToString());
listSearchDB.Items.Add(listItem);
}
Se alguém puder me dar uma luz ficaria muito agradecido.