SelectParameter e clausola WHERE IN

sabato 22 settembre 2012 - 19.11
Tag Elenco Tags  VB.NET  |  .NET 3.5

zseven Profilo | Senior Member

Ciao ragazzi,
come da oggetto mi sono imbattutto in questo problema.
Ho capito che nel selectparameter non posso passare un valore come "2,4,6" da utilizzare con la clausola WHERE IN, e cercando in rete ho visto una serie di possibili soluzioni con l'utilizzo di STORED e LINQ o altri metodi, ma purtroppo non sono riuscito ad utilizzare nessuno di questi per vari motivi, dipendenti solo dalla mia conoscenza degli argomenti.

Al momento ho risolto la cosa creandomi una bruttissima SELECT CASE e vedendo caso per caso (sono solo 3) le varie query da fare.

L'alternativa, un pochino meno brutta, sarebbe stata quella di utilizzare una stringa variabile da agganciare alla selectcommand, cioè una cosa tipo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Volevo chiedervi se questa soluzione di sopra è valida o è aperta a possibile injection, tenendo però presente che il valore di TxtFiltro non viene passato su querystring.

E se conoscete qualche altro metodo per risolvere il problema legato al WHERE IN.

Grazie mille!

Gluck74 Profilo | Guru

forse non è la soluzione migliore, ma almeno è pronta....

http://forums.asp.net/post/5029506.aspx

____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

bludev Profilo | Newbie

Una soluzione trovata qui, che per comodità riporto:
http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause#answer-337792

string[] tags = new string[] { "ruby", "rails", "scruffy", "rubyonrails" }; string cmdText = "SELECT * FROM Tags WHERE Name IN ({0})"; string[] paramNames = tags.Select( (s, i) => "@tag" + i.ToString() ).ToArray(); string inClause = string.Join(",", paramNames); using (SqlCommand cmd = new SqlCommand(string.Format(cmdText, inClause))) { for(int i = 0; i < paramNames.Length; i++) { cmd.Parameters.AddWithValue(paramNames[i], tags[i]); } }

E' scritta in C# ma è facilmente traducibile in VB.
---
Fabio Turrin - Bludev - http://www.bludev.it/

zseven Profilo | Senior Member

Cio ragazzi,
ho visto entrambi i vostri post, ma non ho ancora avuto un attimo di tempo.

Il secondo aiuto l'avevo già trovato in rete, ma ho avuto difficoltà ad applicarlo.
Appena ho un pomeriggio a disposizione provo tutto e vi faccio sapere!

Grazie!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5