我正在構建一個類的搜索功能,供我們的幾個asp頁面使用。這個想法很簡單,從用戶那裏搜索一個搜索詞,然後在數據庫中查詢該項目。目前我在做這個錯誤的方式,這是容易受到SQL注入式攻擊(和ELMAH是在那裏保存一天,如果出現錯誤):使用system.data.oracleclient構建一個好的搜索查詢
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破壞我的系統。 現在,爲了做到這一點,正確的方法是,以作出正確的Oracle變量,通過把:搜索關鍵詞串並添加以下行:
cmd.Parameters.Add(New OracleParameter("SEARCHTERM", searchterm))
的問題是,因爲我用的是一樣的語句,我需要能夠在搜索詞的任一側上具有%,並且我似乎無法使用'%:searchterm%'這樣做,它只是給出了ORA-01036:非法變量名稱/編號的錯誤。
我可以參數化,但仍然有我的靈活的類似的聲明是其中的一部分?
我要快速測試這個。如果這樣做,你會成爲100閃亮新代表的快樂主人。 – Maximillian 2009-09-16 15:07:39
酷!樂意效勞。 – 2009-09-16 22:23:16