Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 3次输入错误的PIN后,模拟卡被没收_Vb.net - Fatal编程技术网

Vb.net 3次输入错误的PIN后,模拟卡被没收

Vb.net 3次输入错误的PIN后,模拟卡被没收,vb.net,Vb.net,我正在连接Access中的数据库,该数据库保存卡详细信息。其中一个字段是“没收”勾选框,表示卡的PIN码输入错误3次。我已经设法让程序检查输入的PIN码是否正确,现在我正试图更改数据库中卡的没收状态。从下拉菜单中选择卡号。当一张卡被没收时,它不应该再出现在此组合框中。这是我目前的代码: Imports System.Data.OleDb Public Class PinEntry Public connectionString As String = "Provider=Microsoft.

我正在连接Access中的数据库,该数据库保存卡详细信息。其中一个字段是“没收”勾选框,表示卡的PIN码输入错误3次。我已经设法让程序检查输入的PIN码是否正确,现在我正试图更改数据库中卡的没收状态。从下拉菜单中选择卡号。当一张卡被没收时,它不应该再出现在此组合框中。这是我目前的代码:

Imports System.Data.OleDb

Public Class PinEntry

Public connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:\Users\ben\Documents\Programming\Year 2\Visual Studio\Assignment2\BankOfGlamorgan\EDP2011-BoG.mdb"
Friend connectionBG As New OleDbConnection
Dim ds As New DataSet
Dim da As New OleDbDataAdapter
Dim commandCardNumber, commandPinNumber As New OleDbCommand()
Dim dr As OleDbDataReader
Dim pinErrorCount, cardNumber, PIN As Integer
Dim oForm As Menu
Dim userInput As String

Private Sub PinEntry_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    connectionBG.ConnectionString = connectionString
    commandCardNumber.Connection = connectionBG
    commandCardNumber.CommandType = CommandType.Text
    commandCardNumber.CommandText = "SELECT cardNumber FROM ATMCards"
    commandPinNumber.Connection = connectionBG
    commandPinNumber.CommandType = CommandType.Text
    commandPinNumber.CommandText = "SELECT PIN FROM ATMCards WHERE cardNumber = ?"

    Try
        connectionBG.Open()
        da.SelectCommand = commandCardNumber
        da.Fill(ds, "ATMCards")
        cmbCardNumber.DataSource = ds.Tables("ATMCards")
        cmbCardNumber.DisplayMember = "cardNumber"

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        connectionBG.Close()
    End Try
End Sub

Private Sub btnEnterPin_Click(sender As Object, e As EventArgs) Handles btnEnterPin.Click
    cardNumber = Convert.ToInt16(cmbCardNumber.Text)
    commandPinNumber.Parameters.Add(New OleDbParameter())
    commandPinNumber.Parameters(0).Value = cardNumber

    Try
        connectionBG.Open()
        dr = commandPinNumber.ExecuteReader()
        While dr.Read()
            PIN = dr.Item("PIN").ToString
        End While
        dr.Close()
        If PIN = userInput Then
            MsgBox("Correct PIN")
            oForm = New Menu()
            oForm.Show()
            oForm = Nothing
        Else
            MsgBox("Incorrect PIN")
        End If

    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        connectionBG.Close()
    End Try

End Sub

Private Sub txtPIN_TextChanged(sender As Object, e As EventArgs) Handles txtPIN.TextChanged
    userInput = txtPIN.Text
End Sub
End Class

你不能只选择CardNumber,其中的值为空吗?这只是一个更安全的应用程序的测试工具吗?请告诉我,我的银行或其他任何人的银行没有使用访问权限来访问此类内容。请此外,没收可能应该是一个位字段,然后您只需查询位字段中没收=false的记录。您能解释一下您的问题吗?您试图在代码中的何处设置没收状态?除了“不正确的PIN”消息外,您还需要增加错误计数器,如果它大于允许的最大值,发出SQL更新以在数据库中设置没收标志。您还需要修改cbo的SQL源代码,使其仅显示“打开的卡片”(提示:使用WHERE子句)(Steve评论的更具心理学意义的版本)。