我在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语句吗?
答案 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)