用户在vb.net中输入的实际值和值之间的比较

时间:2013-01-17 03:54:32

标签: asp.net vb.net

我已编写此代码以比较用户输入的实际值和值。我在名为Spec

的表中设置了实际值
sampleID Category WheatType Silo M_Min   M_Max  WG_Min  WG_Max
1001       1BK      AGP      1   25.00   27.00
1002       1BK      AGP      21                  25.00   28.00

这是比较值

的代码
sql = "SELECT * FROM Spec WHERE WheatType= '" & ddlType.SelectedValue & "' AND Category='1BK' AND Silo='" & txtSilo.Text & "'"
cmd = New OleDbCommand(sql, cnnOLEDB)
cnnOLEDB.Open()
Dim dr As OleDbDataReader
dr = cmd.ExecuteReader()
While dr.Read()

    Try

        If txtHB43S.Text >= dr("M_Min").ToString() And txtHB43S.Text <= dr("M_Max").ToString() Then
            stsHB43S.Text = "Pass"

        ElseIf txtHB43S.Text <= dr("M_Min").ToString() And txtHB43S.Text >= dr("M_Max").ToString() Then
            stsHB43S.Text = "Failed"
            stsHB43S.ForeColor = System.Drawing.Color.Red

        ElseIf txtHB43S.Text <> dr("M_Min").ToString() And txtHB43S.Text <> dr("M_Max").ToString() Then
            stsHB43S.Text = ""

        Else
            stsHB43S.Text = ""

        End If


        If txtGlutematic.Text >= dr("WG_Min").ToString() And txtGlutematic.Text <= dr("WG_Max").ToString() Then
            stsGluten.Text = "Pass"

        ElseIf txtGlutematic.Text <= dr("WG_Min").ToString() And txtGlutematic.Text >= dr("WG_Max").ToString() Then
            stsGluten.Text = "Failed"
            stsGluten.ForeColor = System.Drawing.Color.Red

        ElseIf txtGlutematic.Text <> dr("WG_Min").ToString() And txtGlutematic.Text <> dr("WG_Max").ToString() Then
            stsGluten.Text = ""

        Else
            stsGluten.Text = ""

        End If

问题是如果我只输入txtHB43S.Text = 25.00, Silo=1 and WheatType='AGP'的值,状态会在'Pass'中显示stsHB43S,但在stsGluten中它也会显示'pass'

输出

HB43s = 25.00 stsHB43S=Pass
Gluten =  -    stsGluten =Pass

任何人都可以帮助我

2 个答案:

答案 0 :(得分:0)

这里有一些不同的问题。首先,您正在对字符串进行算术比较。在比较之前,您应该将它们解析为适当的数字类型。其次,您应验证所有输入,以确保它们在处理之前符合预期。有人可以传递直接传递给SQL查询的值这一事实意味着他们可以直接访问您的SQL数据库。查找SQL注入。验证输入将允许您在有人传入空值时以及有人传入非数字的内容时捕获。

答案 1 :(得分:0)

if语句中的逻辑不正确。由于else

,第一个and永远不会成立

我猜你想要这样的东西:

If txtHB43S.Text >= dr("M_Min").ToString() And txtHB43S.Text <= dr("M_Max").ToString() Then
  stsHB43S.Text = "Pass"
else
  stsGluten.Text = "Failed"
  stsGluten.ForeColor = System.Drawing.Color.Red
  end if

(我不确定您何时或是否要为stsGlutenText指定值“”。)

Brian P有很好的建议。例如,输入值“25aslduihhaljsdlsdaf”将通过,除非您在比较之前将两个值都转换为数字值,例如double(查找ctypeisnumeric)。数据库建议良好的安全策略。