【问题标题】:How to save Biometric Template directly into Database (VB.Net)如何将生物识别模板直接保存到数据库(VB.Net)
【发布时间】:2018-04-16 01:45:00
【问题描述】:

我已经设法获取生物特征模板数据,但遗憾的是我无法将其保存或直接插入到数据库中。我无法将模板转换为字节并将其转储到表中。这是我的代码:

Private Sub btnSaveFinger1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveFinger1.Click
    Try
        Dim sql As String
            sql = "INSERT INTO [Kamog_HR].[dbo].[T_FingerPrintMaster] " & _
                    "([fpm_EmployeeID] " & _
                    ",[fpm_FingerIndex] " & _
                    ",[fpm_FingerPrintTemplate] " & _
                    ",[Update_By] " & _
                    ",[Created_Date]) " & _
                    "VALUES " & _
                    "('" & txtEmpID.Text & "' " & _
                    ",0 " & _
                    ",@template " & _
                    ",'SA' " & _
                    ",'" & Now & "') "
        OpenConnection()
        Dim str As New MemoryStream
        Enroller.Template.Serialize(str)
        ExecuteSaveFingerPrint(sql, str)
    Catch ex As Exception
        SetPrompt("Cannot save the fingerprint template")
    Finally
        CloseConnection()
    End Try
End Sub

Public Sub ExecuteSaveFingerPrint(ByVal sql As String, ByVal str As MemoryStream)
    Dim cmd As New SqlCommand(sql, con)
    cmd.CommandTimeout = 0
    Dim serializedTemplate As Byte() = str.ToArray()
    Dim paramater As New SqlParameter("@template", serializedTemplate)
    cmd.Parameters.Add(paramater)
    cmd.ExecuteNonQuery()
End Sub

cmd.ExecuteNonQuery 期间,它返回一个错误消息

"Conversion failed when converting date and/or time from character string."

即使我将Created_Date 删除到 SQL 脚本中,也会出现同样的错误。我不知道为什么以及如何将指纹模板直接保存或插入到数据库中。

【问题讨论】:

  • 您是否考虑过使用 ORM 而不是手动编写 sql 代码并让您的应用面临安全问题?
  • 目标字段是什么数据类型?
  • 我尝试将 varbinary(MAX) 用于 fpm_FingerPrintTemplate 但我将其更改为 varchar(MAX)。
  • 对不起,我没有考虑 ORM 并且我对 ORM 概念不熟悉。它是对象关系映射吗?

标签: sql sql-server vb.net fingerprint biometrics


【解决方案1】:

我已经解决了我自己的问题。这是我如何将生物识别模板插入数据库的示例代码:

Private Sub btnSaveFinger1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveFinger1.Click
    Try
        Dim sql As String
        If verifyFingerPrint() = True Then
            sql = ""
        Else
            sql = "INSERT INTO [Kamog_HR].[dbo].[T_FingerPrintMaster] " & _
                    "([fpm_EmployeeID] " & _
                    ",[fpm_FingerIndex] " & _
                    ",[fpm_FingerPrintTemplate] " & _
                    ",[Update_By] " & _
                    ",[Created_Date]) " & _
                    "VALUES " & _
                    "('" & txtEmpID.Text & "' " & _
                    "," & GetFingerID() & " " & _
                    ",@fptemp " & _
                    ",'SA' " & _
                    ",'" & Now & "') "
        End If
        OpenConnection()
        Dim str As New MemoryStream
        Enroller.Template.Serialize(str)
        ExecuteSaveFingerPrint(sql, str)
        MsgBox("Fingerprint Successfully Saved!", vbInformation, "Fingerprint")
    Catch ex As Exception
        MsgBox("Cannot save the fingerprint template. Please try again")
        pbFinger1.Image = Nothing
        pbFinger2.Image = Nothing
        pbFinger3.Image = Nothing
        pbFinger4.Image = Nothing
        FingerIndex = 4
        Enroller.Clear()
        StopCapture()
        OnTemplate(Nothing)
        StartCapture()
    Finally
        CloseConnection()
    End Try
End Sub

Public Sub ExecuteSaveFingerPrint(ByVal sql As String, ByVal str As MemoryStream)
    Dim cmd As New SqlCommand(sql, con)
    cmd.CommandType = CommandType.Text
    Dim serializedTemplate As Byte() = str.ToArray()
    Dim paramater As New SqlParameter("@fptemp", serializedTemplate)
    cmd.Parameters.Add(paramater)
    cmd.ExecuteNonQuery()
End Sub

谢谢你们!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多