0

実際の値とユーザーが入力した値を比較するために、このコードを記述しました。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

誰かが私を助けることができます

4

2 に答える 2

0

ここにはいくつかの異なる問題があります。まず、文字列の算術比較を行っています。それらを比較する前に、それらを適切な数値型に解析する必要があります。次に、すべての入力を検証して、それらを処理する前に期待どおりであることを確認する必要があります。SQL クエリに直接渡される値を誰かが渡すことができるという事実は、SQL データベースに直接アクセスできることを意味します。SQL インジェクションを参照してください。入力を検証すると、誰かが null を渡したときと、数値以外のものを渡したときをキャッチできます。

于 2013-01-17T04:11:55.173 に答える
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 に "" の値を割り当てるか、またはいつ割り当てるかはわかりません。)

ブライアン P から良いアドバイスがあります。たとえば、「25aslduihhaljsdlsdaf」の入力値は、double比較する前に両方の値を数値に変換しない限り合格します (検索ctypeisnumeric)。データベースは適切なセキュリティ ポリシーをアドバイスします。

于 2013-01-17T05:24:57.290 に答える