我已编写此代码以比较用户输入的实际值和值。我在名为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
任何人都可以帮助我
答案 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
(查找ctype
和isnumeric
)。数据库建议良好的安全策略。