我在一个类中构造一个搜索功能,通过我们的一些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
字符串连接是坏的。 接下来你知道, 鲍比表沉船我的系统。 现在,为了做到这一点,正确的方法是,以作出正确的Oracle变量,通过把:搜索关键词串并添加以下行:
cmd.Parameters.Add(New OracleParameter("SEARCHTERM", searchterm))
问题是,因为我用的是一样的语句,我需要能够有%的搜索词的两侧,而我似乎无法做到这一点与“%:搜索关键词%”,它只是给出了一个错误ORA-01036:非法的变量名/编号。
我可以参数化,但仍然有我喜欢灵活的声明是它的一部分?