Bug #33347 FindByUsers ASP.Net 2.0 Membership
Submitted: 18 Dec 2007 22:07 Modified: 10 Jan 18:29
Reporter: Klas Nilsson
Status: Closed
Category:Connector/Net Severity:S2 (Serious)
Version:5.1.4 OS:Microsoft Windows
Assigned to: Target Version:

[18 Dec 2007 22:07] Klas Nilsson
Description:
Can't use the following ASP.NET 2.0 built-in Membership provider-method in MySQL
Connector/Net 5.1.4.

Public Shared Function FindUsersByEmail(ByVal emailToMatch As String, ByVal pageIndex As
Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As
System.Web.Security.MembershipUserCollection
Member of: System.Web.Security.Membership

The following errormessage appears:

An exception occurred. Please check the Event Log. vid
System.Web.Administration.WebAdminPage.CallWebAdminHelperMethod(Boolean isMembership,
String methodName, Object[] parameters, Type[] paramTypes) vid
System.Web.Administration.SecurityPage.SearchForUsers(Object sender, EventArgs e, Repeater
repeater, GridView dataGrid, DropDownList dropDown, TextBox textBox) vid
ASP.security_users_manageusers_aspx.SearchForUsers(Object sender, EventArgs e) vid
System.Web.UI.WebControls.Button.OnClick(EventArgs e) vid
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) vid
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(St
ring eventArgument) vid System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument) vid
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) vid
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean
includeStagesAfterAsyncPoint) 

This is what the Event-log printed:

An exception occurred communicating with the data source.

Action: FindUsersByEmail

Exception: MySql.Data.MySqlClient.MySqlException: Parameter '?EmailSearch' has already
been defined.
   vid MySql.Data.MySqlClient.MySqlParameterCollection.InternalAdd(MySqlParameter value,
Int32 index)
   vid MySql.Data.MySqlClient.MySqlParameterCollection.Add(String parameterName,
MySqlDbType dbType, Int32 size)
   vid MySql.Web.Security.MySQLMembershipProvider.FindUsersByEmail(String emailToMatch,
Int32 pageIndex, Int32 pageSize, Int32& totalRecords)

Mer information finns i Hjälp- och supportcenter på sidan
http://go.microsoft.com/fwlink/events.asp.

How to repeat:
Use the method "Membership.FindUsersByEmail()" to find users registered.
The method "Membership.FindUsersByName()" on the other hand does NOT throw any Exception.
The latter also correctly supports wildcard characters.

Suggested fix:
This is what the Event-log printed:

An exception occurred communicating with the data source.

Action: FindUsersByEmail

Exception: MySql.Data.MySqlClient.MySqlException: Parameter '?EmailSearch' has already
been defined.
   vid MySql.Data.MySqlClient.MySqlParameterCollection.InternalAdd(MySqlParameter value,
Int32 index)
   vid MySql.Data.MySqlClient.MySqlParameterCollection.Add(String parameterName,
MySqlDbType dbType, Int32 size)
   vid MySql.Web.Security.MySQLMembershipProvider.FindUsersByEmail(String emailToMatch,
Int32 pageIndex, Int32 pageSize, Int32& totalRecords)

Mer information finns i Hjälp- och supportcenter på sidan
http://go.microsoft.com/fwlink/events.asp.
[2 Jan 22:09] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/40489
[2 Jan 22:11] Reggie Burnett
fixed in 5.1.5
[10 Jan 18:29] MC Brown
A note has been added to the 5.1.5 changelog: 

Problem with membership provider would mean that FindUserByEmail would fail with a
MySqlException because it was trying to add a second parameter with the same name as the
first.