2011-05-26 68 views
1

我刚刚创建会员管理程序,这个程序可以一个一个创建用户,它也可以从文本文件导入数据。当我从文本文件导入数据时,它可以在超时之前创建约30位用户,调试完成后,每次CreateUser调用需要将近1秒。通过Membership.CreateUser创建大量会员的高效方法?

我想知道,当我创建大量的aspnet用户时,如何提高性能。

回答

1

解决方法1:

  1. 获得从用户表中的所有数据放入表“用户”数据集DS
  2. 获得从部件表中的所有数据分成表“成员”,在相同的数据集DS
  3. 创建现场用户标识上的两个表之间的关系
  4. 在表的每一行上运行循环用户
  5. 对于每个用户调用具有用户名和P的Membership.CreateUser assword作为参数
  6. 获取所有子行当前用户DataRow.GetChildRows
  7. 对于每个childrow返回,用用户名和角色名作为参数调用Roles.AddUserToRole
    here两者(只添加如果角色有效)。

解决方案2:

  1. 下载Peter Keller's Membership Editor
  2. 创建这些列的电子表格:用户名,密码和电子邮件。
    导入这个Excel文件,该数据库表:yourUsers $
  3. 创建WinForms应用程序,添加一个按钮来形成,并在其click事件中粘贴此代码:从here两者

    protected void batchInsertButton_Click(object sender, EventArgs e) 
    { 
    string strConn = ConfigurationManager.ConnectionStrings["1ConnectionString"].ConnectionString; 
    string strSQL = "SELECT * FROM yourUsers$"; 
    
    SqlConnection myConnection = new SqlConnection(strConn); 
    
    myConnection.Open(); 
    
    SqlCommand myCommand = new SqlCommand(strSQL,myConnection); 
    
    SqlDataReader myReader; 
    
    
    myReader = myCommand.ExecuteReader(); 
        while (myReader.Read()) { 
    
         ObjectDataSourceMembershipUser.InsertParameters["UserName"].DefaultValue = myReader["UserName"].ToString();//TextBoxUserName.Text; ; 
         ObjectDataSourceMembershipUser.InsertParameters["password"].DefaultValue = myReader["password"].ToString();//TextBoxPassword.Text; 
         ObjectDataSourceMembershipUser.InsertParameters["passwordQuestion"].DefaultValue ="your qestion";//TextBoxPasswordQuestion.Text; 
         ObjectDataSourceMembershipUser.InsertParameters["passwordAnswer"].DefaultValue = "your answer";//TextBoxPasswordAnswer.Text; 
         ObjectDataSourceMembershipUser.InsertParameters["email"].DefaultValue = myReader["email"].ToString();//TextBoxEmail.Text; 
         ObjectDataSourceMembershipUser.InsertParameters["isApproved"].DefaultValue = "true";//CheckboxApproval.Checked == true ? "true" : "false"; 
    
    ObjectDataSourceMembershipUser.Insert(); 
    
    
    //hard code this user role 
    Roles.AddUserToRole(myReader["UserName"].ToString(), "NormalUser"); 
    
         } 
    myConnection.Close(); 
    
    GridViewMemberUser.DataBind(); 
    GridViewRole.DataBind(); 
    } 
    

+0

通过ILSpy看,Roles.AddUserToRole调用Roles.AddUsersToRoles。对于NormalUser而言,建立一个用户的字符串数组(小逗号)和一个元素数组,然后在成员之后为用户添加用户角色会有好处:'string [] normalRole = new string [] {“NormalUser”}; Roles.AddUsersToRoles(userList,normalRole); '这两种方法检查Role和UserNames的有效性(逗号,长度,空值),因此它将重复验证“NormalUser”x次数,其中x是要添加的用户数量。 – 2012-05-04 18:29:12

相关问题