Se nella vostre applicazioni fate uso delle membership di ASP.NET, vi sarà
capitato (o vi potrà capitare) di cercare un utente dato una parte dello
username.
La soluzione ovvia è quella di usare la funzione Membership.FindUsersByName, che
come dice la descrizione
"Gets a collection of membership users where the user name contains the
specified user name to match."
Bene, proprio quello che cercavamo, ma qui c'è da prestare un pò di
attenzione. Infatti se come stringa mettiamo "pip" e stavamo cercando l'utente
"pippo", non ci verrà ritornato proprio niente.
La cosa un pò mi puzzava e non capivo il
perchè non mi ritornasse una lista di utenti che contenevano la stringa "pip"
nello username, e dopo un pò di tentativi mi sono rassegnato ed ho abbandonato
il tutto.
Ieri con Andrea ci siamo messi a vedere un pò meglio la facenda,
ed analizzando con Reflector le classi delle SqlMembershipProvider ci
siamo accorti che la stringa di ricerca viene passata direttamente a SQL, e
quindi ponendo due bei percento agli estremi della nostra stringa "%pip%"
ecco che il tutto inizia a funzionare.
SqlCommand command1 = new SqlCommand("dbo.aspnet_Membership_FindUsersByName", holder1.Connection);
MembershipUserCollection collection1 = new MembershipUserCollection();
SqlDataReader reader1 = null;
command1.CommandTimeout = this.CommandTimeout;
command1.CommandType = CommandType.StoredProcedure;
command1.Parameters.Add(this.CreateInputParam("@ApplicationName", SqlDbType.NVarChar, this.ApplicationName));
command1.Parameters.Add(this.CreateInputParam("@UserNameToMatch", SqlDbType.NVarChar, usernameToMatch));
command1.Parameters.Add(this.CreateInputParam("@PageIndex", SqlDbType.Int, pageIndex));
command1.Parameters.Add(this.CreateInputParam("@PageSize", SqlDbType.Int, pageSize));
command1.Parameters.Add(parameter1);
Print | posted on martedì 12 settembre 2006 18:21