Я создаю функцию поиска в классе, которая будет использоваться несколькими нашими страницами asp. Идея проста: возьмите поисковый запрос от пользователя и запросите элемент в базе данных. В настоящее время я делаю это неправильным способом, который уязвим для атак путем внедрения SQL (и ELMAH). там, чтобы спасти день, если что-то пойдет не так):
Public Shared Function SearchByName(ByVal searchterm As String) As DataTable
SearchByName = New DataTable
Dim con As New OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings("OracleDB").ConnectionString)
Try
con.Open()
Dim SqlStr As String = "select ID_ELEMENT, ELEMENT_NAME from table_of_elements where upper(ELEMENT_NAME) like upper('%" & searchterm & "%')"
Dim cmd As New OracleCommand(SqlStr, con)
SearchByName.Load(cmd.ExecuteReader)
Catch ex As Exception
Elmah.ErrorSignal.FromCurrentContext().Raise(ex)
End Try
con.Close()
con.Dispose()
Return SearchByName
End Function
Конкатенация строк ПЛОХАЯ. Следующее, что вы знаете, Bobby Tables разрушает мою систему. Теперь правильный способ сделать это — создать правильную переменную оракула, поместив :searchterm в строку и добавив следующую строку:
cmd.Parameters.Add(New OracleParameter("SEARCHTERM", searchterm))
Проблема в том, что, поскольку я использую подобное выражение, мне нужно иметь % по обе стороны от поискового слова, и я не могу сделать это с «%: searchterm%», это просто дает ошибку ORA-01036: Недопустимое имя/номер переменной.
Могу ли я параметризовать, но по-прежнему иметь в своем составе гибкое подобное выражение?