2011-05-26 54 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