【发布时间】:2019-11-25 21:22:06
【问题描述】:
我正在用 Visual Basic 模拟 ATM。我在 SQL 中有一个名为 Authentication 的表。该表包含两列:NUM_CARD 列和 PIN_CARD 列。在插入卡 ID 时,我需要将行 (0) 列 1、行 (1) 列 (1)、行 (2) 列 (1) 等与其他行匹配。我怎样才能做到这一点?提前致谢。
DBConnection 类如下:
Imports System
Imports System.Data.Sql
Imports System.Data.SqlClient
Public Class clsDBConnection
'Class variables'
Public cn As SqlConnection
Public cmd As SqlCommand
Public dr As SqlDataReader
'Constructor of the Connection class that creates the connection'
Sub New()
Try
cn = New SqlConnection("Data Source=JOVALLES-PC\SQLSERVEREX;Initial Catalog=SigmasBank;Integrated Security=True")
cn.Open()
Catch ex As Exception
MsgBox("Error connecting due to:: " + ex.ToString)
End Try
End Sub
'Returns true or false if the record exists or not in the database'
Function validationAutentication_p1(ByVal NUM_CARD As String) As Boolean
Dim result As Boolean = False
Try
cmd = New SqlCommand("Select * from Autentication where NUM_CARD='" & NUM_CARD & "'", cn)
dr = cmd.ExecuteReader
If dr.HasRows Then
result = True
End If
dr.Close()
Catch ex As Exception
MsgBox("Error in the procedure: " + ex.ToString)
End Try
Return result
End Function
Function validationAutentication_p2(ByVal PIN_CARD As String) As Boolean
Dim result As Boolean = False
Try
cmd = New SqlCommand("Select * from Autentication where PIN_CARD='" & PIN_CARD & "'", cn)
dr = cmd.ExecuteReader
If dr.HasRows Then
result = True
End If
dr.Close()
Catch ex As Exception
MsgBox("Error in the procedure: " + ex.ToString)
End Try
Return result
End Function
End Class
插入卡 ID 表格:
Public Class FRM_InsertCardID
Public conn As New clsDBConnection
Private Sub BTN_Ok_Click(sender As Object, e As EventArgs) Handles BTN_Ok.Click
If TXB_CardID.Text.Length = 0 Then
MsgBox("Please fill in field.")
ElseIf TXB_CardID.Text.Length > 0 And TXB_CardID.Text.Length < 16 Then
MsgBox("Your Card ID must be 16 digits.")
ElseIf conn.validationAutentication_p1(TXB_CardID.Text) = False Then
MsgBox("The Card ID doesn't exist.")
Else
FRM_PIN.Show()
Me.Hide()
TXB_CardID.Text = ""
End If
End Sub
插入 PIN 表单:
Public Class FRM_PIN
Public conn As New clsDBConnection
Private Sub BTN_Ok_Click(sender As Object, e As EventArgs) Handles BTN_Ok.Click
If TXB_PIN.Text.Length = 0 Then
MsgBox("Please fill in field.")
ElseIf TXB_PIN.Text.Length > 0 And TXB_PIN.Text.Length < 4 Then
MsgBox("Your PIN must be 4 digits.")
ElseIf conn.validationAutentication_p2(TXB_PIN.Text) = False Then
MsgBox("Incorrect PIN Please try again.")
Else
FRM_Transaction.Show()
Me.Hide()
TXB_PIN.Text = ""
End If
End Sub
【问题讨论】:
-
注意:始终使用参数以避免sql注入和格式错误。
-
该示例没有提供任何见解,如果记录存在,您只会返回两个布尔值。除非已加密,否则您永远不会将这些信息存储在数据库中。这将是工作的最大份额。处理加密后,您只需从两个字段都存在记录的函数返回一个布尔值。
-
我稍后会进行加密。感谢您的注意。我现在正在测试的是存储在数据库中的信息。问题如下:当我输入数据库中的卡ID时,输入PIN时,我可以通过输入PIN 1234或PIN 5678毫无问题地访问并且存在问题。我需要卡 ID 2222222222222222 的 PIN 码仅为 1234。问候。
-
Select * from Autentication where PIN_CARD= @param1 AND NUM_CARD=@param2 No?
-
你在使用
Imports System.Data.Sql的具体哪些类?
标签: sql-server vb.net validation