2016-04-06 2 views
0

Я пытаюсь выполнить запрос SQL в моем vb.net приложения с помощью циклаvb.net облицовку слово от конца строки

SQL = "SELECT * FROM table WHERE " 
For m = 1 To num_array 
    SQL = SQL & "type = '" & array(m, 1) & "' OR " 
Next 

но его показывающей OR в конце.

Как я могу обрезать последние OR по моему запросу?

+3

Не делайте этого. Вместо этого используйте параметризованные запросы. в противном случае вы рискуете атаками [sql injection] (https://en.wikipedia.org/wiki/SQL_injection). –

+0

Эти типы механизмов SQL/помощники параметров редко упрощают код – Plutonix

ответ

3

Это, кажется, работа для StringBuilder

Dim sql = new StringBuilder("SELECT * FROM table WHERE ") 
For m = 1 To num_array 
    sql.Append("type = '" & array(m, 1) & "' OR ") 
Next 

If num_array > 0 Then 
    sql.Length -= 4 
End If 

Однако стоит обратить особое внимание на вашу конкатенацию. Кажется, что ваш массив не содержит чисел, кроме строки, потому что вы помещаете все между одинарными кавычками, и это означает, что ваше поле типа является строкой, а не числом.
Конечно, я надеюсь, что ваш контент массива не будет напрямую вставлен вашим пользователем, иначе у вас будет большой риск безопасности под названием Sql Injection. В любом случае посмотрите, как создать параметризованный запрос.

Что-то вроде этого

Dim prms = New List(Of SqlParameter)() 
Dim num_Array = 4 
Dim sql = New StringBuilder("SELECT * FROM table WHERE ") 
For m = 1 To num_array 
    sql.Append("type = @p" & m & " OR ") 
    prms.Add(New SqlParameter("@p" & m, array(m, 1))) 
Next 

If num_array > 0 Then 
    sql.Length -= 4 
End If 
Dim cmd = new SqlCommand(sql.ToString(), connection) 
cmd.Parameters.AddRange(prms.ToArray()) 
Смежные вопросы