在if / case语句vb.net之外使用变量

时间:2015-08-06 22:03:26

标签: sql vb.net if-statement public

我在vb.net visual studio express中使用sql后端工作。我有很长的SQL命令,我需要根据从文本框生成的数字更改sql命令的一部分。我可以多次重写150行代码来处理这种情况,或者以某种方式在IF语句之外传递一个变量。这就是我的意思。

If textbox.text = "5" then

    Dim string = "Some text to be used in an sql statement"

Elseif textbox.text = "6" then

    Dim string = "Some other text to be used in an sql statement"

End if (Please note there are more than 2 examples)

Using comm1 as new sqlcommand ("blah blah blah " & String & " blah blah blah", conn1)

因此,考虑到“& String&在我的if语句之外,这意味着它不被认可在if语句之外。但是我不想多次重写150行代码所以我需要一个将字符串函数传递给它的方法。我可以用if语句或case语句吗?

2 个答案:

答案 0 :(得分:2)

我真的建议永远不要像这样构建一个SQL命令(字符串连接)。通过熟悉prepared statements,养成保护自己免受SQL注入攻击的习惯。准备好的语句需要使用定义良好的参数,然后为您生成(准备好!)命令。

我将向您展示一个示例,它将使动态文本成为预处理语句中的参数之一:

Dim textParam As New SqlParameter("@TextParam", SqlDbType.VarChar, 100)

If textbox.Text = "5" Then
    textParam.Value = "ValueWhenTextIs5"
Else If textbox.Text = "6" Then
    textParam.Value = "ValueWhenTextIs6"
Else If
    ...
End If

Using comm1 As New SqlCommand (Nothing, conn1)

    comm1.CommandText = "INSERT INTO Test(Column) VALUES (@TextParam)"
    comm1.Parameters.Add(textParam)

    comm1.Prepare();
    comm1.ExecuteNonQuery();

End Using

答案 1 :(得分:2)

请注意,SQL注入会出现问题,因为您没有使用参数化查询,但这是如何在if语句之外声明一个值,以便您可以在if语句之外使用它。

Dim s as String = String.Empty

If textbox.text = "5" then

    s = "Some text to be used in an sql statement"

Elseif textbox.text = "6" then

    s = "Some other text to be used in an sql statement"

End if ' (Please note there are more than 2 examples)

'... incomplete code
 Using comm1 as new sqlcommand ("blah blah blah " & s & " blah blah blah", conn1)