Membership.FindUserByName, ecco perchè non mi funzionava

by Andrea 12 September 2006 14:09
Se nella vostra applicazione fate uso delle membership di ASP.NET, vi sarà capitato (o vi potrà capitare) di cercare un user 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 untenti 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 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); [...]

Tags:

.NET

Comments are closed