Usuário com melhor resposta
Exemplo C# para Digital Persona U.are.U 4000B Reader.

Pergunta
-
Boa tarde,
Preciso criar uma solução desktop simples para realizar leitura biométrica e estou utilizando o dispositivo "Digital Persona U.are.U 4000B Reader", porém não estou encontrando nenhum exemplo na internet.
Já instalei o driver do dispositivo no meu computador, não sei qual são as dlls que preciso utilizar.
Alguém tem algum exemplo de como realizar essa leitura? Ou então quais são as dlls que preciso adicionar para continuar a solução?
Obrigado.
Respostas
Todas as Respostas
-
Rafael boa noite,
Esse aparelho acompanha alguma mídia ou coisa do tipo ? Por que nos casos em que trabalhei com leitores biométricos assim a própria fabricante fornecia o SDK, DLLs e etc que era necessários, além de algumas demos (simples mas que ajudavam). O que você pode fazer é olhar também dentro do diretório de instalação do driver se não há nenhuma DLL ou coisa do gênero e tentar adicionar ao projeto e "fuçar" nas classes.
Att.
Guilherme Silva Cardoso
-
Rafael boa noite,
Esse aparelho acompanha alguma mídia ou coisa do tipo ? Por que nos casos em que trabalhei com leitores biométricos assim a própria fabricante fornecia o SDK, DLLs e etc que era necessários, além de algumas demos (simples mas que ajudavam). O que você pode fazer é olhar também dentro do diretório de instalação do driver se não há nenhuma DLL ou coisa do gênero e tentar adicionar ao projeto e "fuçar" nas classes.
Att.
Guilherme Silva Cardoso
Bom dia Guilherme,
Junto com o dispositivo veio um DVD, nele veio o driver de instalação e um exemplo em C++, porém vou precisar desenvolver em C#. Ao instalar o dispositivo, ele adicionou várias dll's no C:Arquivos de Programas\Digital Person\bin. Conforme a imagem abaixo:
Vou ir adicionando elas individualmente para tentar realizar a leitura. No site da empresa eles cobram pela SDK.
Quando tiver um projeto pronto eu posto aqui.
Obrigado.
-
-
-
Oi Rafael
Estou passando pela mesma dificuldade. Você consegui implementar? poderia me dar umas dicas?
Desde já agradeço.
Bom dia Fábio, desculpa a demora em responder.
O cliente acabou trocando o leitor para uma outra marca, a SDK de desenvolvimento desse leitor é pago.
Utilizamos o Nitgen HFDU006 (FingerTech), para esse segue código abaixo para abertura, consulta e gravação da digital. Nesse, a SDK é gratuita:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using MettaGeral; using NITGEN.SDK.NBioBSP; namespace MettaCSC { public class LeitorBiometrico { public static long id_colab; NBioAPI m_NBioAPI; NBioAPI.IndexSearch m_IndexSearch; NBioAPI.Type.FIR_TEXTENCODE m_textFIR; NBioAPI.Type.WINDOW_OPTION m_WinOption; public LeitorBiometrico() { // Create NBioBSP object m_NBioAPI = new NBioAPI(); m_IndexSearch = new NBioAPI.IndexSearch(m_NBioAPI); uint ret = m_IndexSearch.InitEngine(); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); } NBioAPI.Type.VERSION version = new NBioAPI.Type.VERSION(); m_NBioAPI.GetVersion(out version); m_WinOption = new NBioAPI.Type.WINDOW_OPTION(); m_WinOption.Option2 = new NBioAPI.Type.WINDOW_OPTION_2(); } public string GravaDigital(int id_finger) { NBioAPI.Type.HFIR hNewFIR; string digital = ""; m_WinOption.WindowStyle = NBioAPI.Type.WINDOW_STYLE.POPUP; m_WinOption.Option2.DisableFingerForEnroll[0] = (byte)((id_finger == 0) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[1] = (byte)((id_finger == 2) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[2] = (byte)((id_finger == 4) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[3] = (byte)((id_finger == 6) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[4] = (byte)((id_finger == 8) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[5] = (byte)((id_finger == 1) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[6] = (byte)((id_finger == 3) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[7] = (byte)((id_finger == 5) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[8] = (byte)((id_finger == 7) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[9] = (byte)((id_finger == 9) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); // abre dispositivo m_NBioAPI.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO); // get FIR data uint ret = m_NBioAPI.Enroll(null, out hNewFIR, null, NBioAPI.Type.TIMEOUT.DEFAULT, null, m_WinOption); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); return ""; } m_NBioAPI.GetTextFIRFromHandle(hNewFIR, out m_textFIR, true); digital = m_textFIR.TextFIR.ToString(); // fecha dispositivo m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); return digital; } public uint myCallback(ref NBioAPI.IndexSearch.CALLBACK_PARAM_0 cbParam0, IntPtr userParam) { return NBioAPI.IndexSearch.CALLBACK_RETURN.OK; } public bool VerificaDigital() { try { AbrirArquivo(); NBioAPI.Type.HFIR hCapturedFIR; // Abre dispositivo e captura a digital. m_NBioAPI.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO); uint ret = m_NBioAPI.Capture(out hCapturedFIR); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); return false; } // Fecha Dispositivo. m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); uint nMax; m_IndexSearch.GetDataCount(out nMax); NBioAPI.IndexSearch.CALLBACK_INFO_0 cbInfo0 = new NBioAPI.IndexSearch.CALLBACK_INFO_0(); cbInfo0.CallBackFunction = new NBioAPI.IndexSearch.INDEXSEARCH_CALLBACK(myCallback); // Identify FIR to IndexSearch DB NBioAPI.IndexSearch.FP_INFO fpInfo; ret = m_IndexSearch.IdentifyData(hCapturedFIR, RetornaNivelSeguranca(Parametros.GetParam(3, "08")), out fpInfo, cbInfo0); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); return false; } id_colab = fpInfo.ID; return true; } catch (Exception ex) { throw new Exception(ex.Message); } } /// <summary> /// Método para retornar o valor do nível de segurança /// </summary> /// <param name="p">Valor retornado do parâmetro</param> /// <returns>Valor no nível de segurança</returns> private uint RetornaNivelSeguranca(string p) { uint valorRetorno = 0; switch (p) { case "1": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOWEST; break; case "2": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOWER; break; case "3": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOW; break; case "4": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.BELOW_NORMAL; break; case "5": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.NORMAL; break; case "6": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.ABOVE_NORMAL; break; case "7": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGH; break; case "8": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGHER; break; case "9": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGHEST; break; default: valorRetorno = 0; break; } return valorRetorno; } public void GerarArquivoDigital() { // declarações de variaveis locais long id_dig; NBioAPI.Type.FIR_TEXTENCODE chave_dig = new NBioAPI.Type.FIR_TEXTENCODE(); DataSet dsTemp = new DataSet(); DataTable dtTemp = new DataTable(); try { // limpa a base de dados do leitor m_IndexSearch.ClearDB(); Global.sSql.Remove(0, Global.sSql.Length); Global.sSql.Append(" select * from colab_digitais where cld_desabilitado = 'N' order by cld_id_colab_digitais "); dsTemp = LDataAccess.GetDataSet(Global.sSql.ToString()); dtTemp = dsTemp.Tables[0]; if (dtTemp.Rows.Count == 0) { return; } // faz um laco no datarow ate o fim dos registro foreach (DataRow dr in dtTemp.Rows) { id_dig = ValidaDados.ParseReq<long>(dr["cld_id_colab_digitais"]); if (ValidaDados.Parse(dr["cld_polegar_dir_0"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_polegar_dir_0"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_polegar_esq_1"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_polegar_esq_1"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_indicador_dir_2"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_indicador_dir_2"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_indicador_esq_3"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_indicador_esq_3"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_medio_dir_4"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_medio_dir_4"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_medio_esq_5"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_medio_esq_5"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_anelar_dir_6"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_anelar_dir_6"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_anelar_esq_7"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_anelar_esq_7"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_minimo_dir_8"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_minimo_dir_8"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_minimo_esq_9"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_minimo_esq_9"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } } //realiza a gravação do arquivos com a base de digitais string szFileName = Parametros.GetParam(3, "09") + "digitais.ISDB"; if (System.IO.File.Exists(szFileName)) { System.IO.File.Delete(szFileName); } uint ret = m_IndexSearch.SaveDBToFile(szFileName); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); return; } return; } catch (Exception exp) { ConstEngebuilder.MessageError(ConstEngebuilder.erroGravar, ConstEngebuilder.erro, exp.Message, "", ""); return; } } public void AbrirArquivo() { //realiza a gravação do arquivos com a base de digitais string szFileName = Parametros.GetParam(3, "09") + "digitais.ISDB"; if (!(System.IO.File.Exists(szFileName))) { ConstEngebuilder.MessageInformation("Arquivo ISDB não Encontrado!", "", "", "", ""); } // Clear IndexSearchDB m_IndexSearch.ClearDB(); // Load SearchDB from File uint ret = m_IndexSearch.LoadDBFromFile(szFileName); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); return; } } private bool AdicionaDigital(NBioAPI.Type.FIR_TEXTENCODE chave_dig, uint id_dig) { NBioAPI.IndexSearch.FP_INFO[] fpInfo; uint ret = m_IndexSearch.AddFIR(chave_dig, id_dig, out fpInfo); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); return false; } return true; } } }
Espero que de alguma forma consiga ajudar.
-
-
Oi Rafael
Estou passando pela mesma dificuldade. Você consegui implementar? poderia me dar umas dicas?
Desde já agradeço.
Bom dia Fábio, desculpa a demora em responder.
O cliente acabou trocando o leitor para uma outra marca, a SDK de desenvolvimento desse leitor é pago.
Utilizamos o Nitgen HFDU006 (FingerTech), para esse segue código abaixo para abertura, consulta e gravação da digital. Nesse, a SDK é gratuita:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using MettaGeral; using NITGEN.SDK.NBioBSP; namespace MettaCSC { public class LeitorBiometrico { public static long id_colab; NBioAPI m_NBioAPI; NBioAPI.IndexSearch m_IndexSearch; NBioAPI.Type.FIR_TEXTENCODE m_textFIR; NBioAPI.Type.WINDOW_OPTION m_WinOption; public LeitorBiometrico() { // Create NBioBSP object m_NBioAPI = new NBioAPI(); m_IndexSearch = new NBioAPI.IndexSearch(m_NBioAPI); uint ret = m_IndexSearch.InitEngine(); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); } NBioAPI.Type.VERSION version = new NBioAPI.Type.VERSION(); m_NBioAPI.GetVersion(out version); m_WinOption = new NBioAPI.Type.WINDOW_OPTION(); m_WinOption.Option2 = new NBioAPI.Type.WINDOW_OPTION_2(); } public string GravaDigital(int id_finger) { NBioAPI.Type.HFIR hNewFIR; string digital = ""; m_WinOption.WindowStyle = NBioAPI.Type.WINDOW_STYLE.POPUP; m_WinOption.Option2.DisableFingerForEnroll[0] = (byte)((id_finger == 0) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[1] = (byte)((id_finger == 2) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[2] = (byte)((id_finger == 4) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[3] = (byte)((id_finger == 6) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[4] = (byte)((id_finger == 8) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[5] = (byte)((id_finger == 1) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[6] = (byte)((id_finger == 3) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[7] = (byte)((id_finger == 5) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[8] = (byte)((id_finger == 7) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); m_WinOption.Option2.DisableFingerForEnroll[9] = (byte)((id_finger == 9) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE); // abre dispositivo m_NBioAPI.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO); // get FIR data uint ret = m_NBioAPI.Enroll(null, out hNewFIR, null, NBioAPI.Type.TIMEOUT.DEFAULT, null, m_WinOption); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); return ""; } m_NBioAPI.GetTextFIRFromHandle(hNewFIR, out m_textFIR, true); digital = m_textFIR.TextFIR.ToString(); // fecha dispositivo m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); return digital; } public uint myCallback(ref NBioAPI.IndexSearch.CALLBACK_PARAM_0 cbParam0, IntPtr userParam) { return NBioAPI.IndexSearch.CALLBACK_RETURN.OK; } public bool VerificaDigital() { try { AbrirArquivo(); NBioAPI.Type.HFIR hCapturedFIR; // Abre dispositivo e captura a digital. m_NBioAPI.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO); uint ret = m_NBioAPI.Capture(out hCapturedFIR); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); return false; } // Fecha Dispositivo. m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); uint nMax; m_IndexSearch.GetDataCount(out nMax); NBioAPI.IndexSearch.CALLBACK_INFO_0 cbInfo0 = new NBioAPI.IndexSearch.CALLBACK_INFO_0(); cbInfo0.CallBackFunction = new NBioAPI.IndexSearch.INDEXSEARCH_CALLBACK(myCallback); // Identify FIR to IndexSearch DB NBioAPI.IndexSearch.FP_INFO fpInfo; ret = m_IndexSearch.IdentifyData(hCapturedFIR, RetornaNivelSeguranca(Parametros.GetParam(3, "08")), out fpInfo, cbInfo0); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); return false; } id_colab = fpInfo.ID; return true; } catch (Exception ex) { throw new Exception(ex.Message); } } /// <summary> /// Método para retornar o valor do nível de segurança /// </summary> /// <param name="p">Valor retornado do parâmetro</param> /// <returns>Valor no nível de segurança</returns> private uint RetornaNivelSeguranca(string p) { uint valorRetorno = 0; switch (p) { case "1": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOWEST; break; case "2": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOWER; break; case "3": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOW; break; case "4": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.BELOW_NORMAL; break; case "5": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.NORMAL; break; case "6": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.ABOVE_NORMAL; break; case "7": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGH; break; case "8": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGHER; break; case "9": valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGHEST; break; default: valorRetorno = 0; break; } return valorRetorno; } public void GerarArquivoDigital() { // declarações de variaveis locais long id_dig; NBioAPI.Type.FIR_TEXTENCODE chave_dig = new NBioAPI.Type.FIR_TEXTENCODE(); DataSet dsTemp = new DataSet(); DataTable dtTemp = new DataTable(); try { // limpa a base de dados do leitor m_IndexSearch.ClearDB(); Global.sSql.Remove(0, Global.sSql.Length); Global.sSql.Append(" select * from colab_digitais where cld_desabilitado = 'N' order by cld_id_colab_digitais "); dsTemp = LDataAccess.GetDataSet(Global.sSql.ToString()); dtTemp = dsTemp.Tables[0]; if (dtTemp.Rows.Count == 0) { return; } // faz um laco no datarow ate o fim dos registro foreach (DataRow dr in dtTemp.Rows) { id_dig = ValidaDados.ParseReq<long>(dr["cld_id_colab_digitais"]); if (ValidaDados.Parse(dr["cld_polegar_dir_0"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_polegar_dir_0"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_polegar_esq_1"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_polegar_esq_1"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_indicador_dir_2"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_indicador_dir_2"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_indicador_esq_3"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_indicador_esq_3"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_medio_dir_4"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_medio_dir_4"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_medio_esq_5"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_medio_esq_5"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_anelar_dir_6"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_anelar_dir_6"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_anelar_esq_7"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_anelar_esq_7"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_minimo_dir_8"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_minimo_dir_8"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } if (ValidaDados.Parse(dr["cld_minimo_esq_9"]) != null) { chave_dig.TextFIR = ValidaDados.Parse(dr["cld_minimo_esq_9"]); if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return; } } //realiza a gravação do arquivos com a base de digitais string szFileName = Parametros.GetParam(3, "09") + "digitais.ISDB"; if (System.IO.File.Exists(szFileName)) { System.IO.File.Delete(szFileName); } uint ret = m_IndexSearch.SaveDBToFile(szFileName); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); return; } return; } catch (Exception exp) { ConstEngebuilder.MessageError(ConstEngebuilder.erroGravar, ConstEngebuilder.erro, exp.Message, "", ""); return; } } public void AbrirArquivo() { //realiza a gravação do arquivos com a base de digitais string szFileName = Parametros.GetParam(3, "09") + "digitais.ISDB"; if (!(System.IO.File.Exists(szFileName))) { ConstEngebuilder.MessageInformation("Arquivo ISDB não Encontrado!", "", "", "", ""); } // Clear IndexSearchDB m_IndexSearch.ClearDB(); // Load SearchDB from File uint ret = m_IndexSearch.LoadDBFromFile(szFileName); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); return; } } private bool AdicionaDigital(NBioAPI.Type.FIR_TEXTENCODE chave_dig, uint id_dig) { NBioAPI.IndexSearch.FP_INFO[] fpInfo; uint ret = m_IndexSearch.AddFIR(chave_dig, id_dig, out fpInfo); if (ret != NBioAPI.Error.NONE) { DisplayErrorMsg(ret); return false; } return true; } } }
Espero que de alguma forma consiga ajudar.