验证文本框在vb.net中是否具有数值,并将值与数据库进行比较

时间:2015-03-19 18:30:21

标签: asp.net vb.net validation textbox

在此处输入图像说明我正在尝试验证用户将放置ID的文本框。 ID必须是数字,同时与数据库中的有效ID进行比较。当我刚刚验证数字时,我没有任何问题。但是现在我有两个条件,我的代码无法正常工作。每当我在文本框中输入字母并单击按钮时,它就会给我一个错误。布尔值让我失去了大声笑。以下是我的代码:

提前谢谢。

Protected Sub btnGo_Click(sender As Object, e As EventArgs) Handles btnGo.Click

    Dim dt As DataTable
    Dim dr As DataRow

    Dim Conn As New SqlConnection("Data Source=Computer;Initial Catalog=Catalog;Persist Security Info=True;User ID=userid;Password=password")
    Dim cmd As New SqlCommand("SELECT COUNT(*) FROM [tbl] WHERE [ID]=@Value", Conn)
    cmd.Parameters.Add("@Value", SqlDbType.NVarChar).Value = txtId.Text

    Conn.Open()
    Dim valueExistsInDB As Boolean = CBool(CInt(cmd.ExecuteScalar()) > 0)
    Conn.Close()

    If (IsNumeric(txtId.Text)) AndAlso valueExistsInDB = True AndAlso txtId.Text IsNot Nothing Then
        dt = GetDataTable("SELECT ID, LEFT(SANZ_ID, PATINDEX('%.%', SANZ_ID) -1) AS City, CASE WHEN ST_DIR_ID = 1 THEN 'NB' WHEN ST_DIR_ID = 2 THEN 'SB' WHEN ST_DIR_ID = 3 THEN 'EB' WHEN ST_DIR_ID = 4 THEN 'WB' END AS ST_DIR, STREET_OF_TRAVEL, CROSS_STREET, (SELECT TOP 1 CASE WHEN STATUS_ID = 1 THEN 'F' WHEN STATUS_ID = 2 THEN 'P' WHEN STATUS_ID = 3 THEN 'I' WHEN STATUS_ID = 4 THEN 'N' WHEN STATUS_ID = 5 THEN 'A' END FROM tbl where dbo.tbl.ID=ID) AS STATUS FROM tbl WHERE ID=" & txtId.Text)
        dr = dt.Rows(0)
        labelStreet.Text = dr("street_of_travel")
        labelCrossStreet.Text = dr("cross_street")
        labelCity.Text = dr("city")
        labelDir.Text = dr("st_dir")
        labelAda.Text = dr("STATUS")
        'dropdownStatus.SelectedValue=

        dropdownStatus.Visible = True
        txtNotes.Visible = True
        btnSave.Visible = True

    Else
        MessageBox.Show("ID not found! Please input a valid ID.")
    End If

End Sub

1 个答案:

答案 0 :(得分:1)

如果ID是数字字段,则应传递数字参数而不是NVarChar

' First try to convert the input text to an integer '
' this should be done here before acting on the db '
Dim id As Integer
if Not Int32.TryParse(txtId.Text, id) Then
    MessageBox.Show("Error, not a valid number")
    return
End If

Dim cmdText = "SELECT COUNT(*) FROM [tbl] WHERE [ID]=@Value"
Using Conn = New SqlConnection(....)
Using cmd As New SqlCommand(cmdText, Conn)
   cmd.Parameters.Add("@Value", SqlDbType.Int).Value = id
   Conn.Open()
   Dim valueExistsInDB = CBool(CInt(cmd.ExecuteScalar()) > 0)

   ' At this point you don't need anymore to check if the input value'
   ' is numeric and your if is more simple.....'
   if valueExistsInDB Then
   ......
   ... continue with your code ....

   Else
       MessageBox.Show("ID not found! Please input a valid ID.")
   End if
End Using
End Using