Ho un'applicazione web asp.net che necessita di una pagina di ricerca che cerca i dati in una tabella specifica (SQL). Oggi ha solo una semplice domanda come, useing sql parametized:Ricerca SQL con operatori logici
SqlParameter[] param = new SqlParameter[1];
param[0] = new SqlParameter("@searchText", SqlDbType.VarChar);
param[0].Value = "%" + text + "%";
using (SqlDataReader dr = SqlHelper.ExecuteReader(this.ConnectionString, CommandType.StoredProcedure, "isp_Search", param))
{
//Do something
}
Ora ho bisogno di aggiungere la possibilità di utilizzare operatori logici per la ricerca.
Così nella casella di testo un utente potrebbe cercare cose come
Adam OR Adams
James AND NOT Jame
Douglas AND (Adam OR Adams)
Aggiunta di indicizzazione full-text per la tabella non è un'opzione preferita dal momento che non controllano il modello di dati.
Sto cercando un metodo per interpretare le query di testo e convertire in un'istruzione SQL con il numero appropriato di SqlParams.
searchexpression = "Douglas AND (Adam OR Adams)"
MakeSearchQuery(searchexpression, out sqlquery, out SqlParam[] params)
Sarebbe tornato somelike come
sqlquery = "SELECT someFields FROM table WHERE [email protected] AND ([email protected] OR [email protected])"
E uno sqlParams come
sqlParam[0] = 'Douglas'
sqlParam[1] = 'Adam'
sqlParam[2] = 'Adams'
Ora ci deve essere qualcuno che hanno fatto qualcosa di simile prima? Ho cercato sia su SO che su Google senza alcun vero successo. E i riferimenti a codice open source/libero o una buona idea su come convertire l'espressione di ricerca in SQL sono i benvenuti.
Su quale motore SQL utilizzi, la risposta è diversa per database. alcuni supportano regexp, altri no. – Johan
SQL Server 2008 R2 – Paaland