public static void ConvertRoles() { RoleCollection newRoles = new RoleCollection(); string sql = @" --�����û������ݵĴ����� IF EXISTS(SELECT * FROM sysobjects WHERE [type]=N'TR' AND [name]=N'bx_UserRoles_AfterUpdate') DROP TRIGGER bx_UserRoles_AfterUpdate; --GO "; using (SqlConnection connection = new SqlConnection(Settings.Current.IConnectionString)) { connection.Open(); SqlCommand command = new SqlCommand(sql, connection); command.CommandTimeout = 60; try { command.ExecuteNonQuery(); } catch (Exception ex) { CreateLog(ex); throw new Exception("ɾ��������bx_UserRoles_AfterUpdateʧ��" + ex.Message + sql); } finally { connection.Close(); } } Guid vipRoleID = new Guid(new byte[] { 152, 198, 223, 228, 218, 198, 221, 78, 191, 59, 129, 195, 81, 168, 105, 207 }); //�����ο͡�everyone sql = @" IF EXISTS (SELECT * FROM sysobjects WHERE [type] = N'U' AND [name] = N'Max_Roles') AND EXISTS (SELECT * FROM [sysobjects] WHERE [type]='U' AND [name]='Max_UsersInRoles') BEGIN IF NOT EXISTS (SELECT [name] FROM syscolumns WHERE id = object_id('Max_Roles') AND [name] = 'NewRoleID') ALTER TABLE Max_Roles add [NewRoleID] uniqueidentifier NOT NULL DEFAULT(NEWID()); SELECT * FROM Max_Roles WHERE RoleID > 0; IF EXISTS (SELECT * FROM sysobjects WHERE [type] = N'U' AND [name] = N'bbsMax_PointLevels') SELECT * FROM bbsMax_PointLevels WHERE RequireRoleID = 0; END ELSE SELECT -9999 AS RoleID; "; using (SqlConnection connection = new SqlConnection(Settings.Current.IConnectionString)) { connection.Open(); SqlCommand command = new SqlCommand(sql, connection); command.CommandTimeout = 60; try { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { #region ������ int roleID = (int)reader["RoleID"]; //Max_Roles������ڣ��˳��û���ת�� if (roleID == -9999) return; Guid newRoleID = (Guid)reader["NewRoleID"]; string roleName = (string)reader["RoleName"]; string logoUrl = (string)reader["LogoUrl"]; string displayColor = (string)reader["DisplayColor"]; Role role; switch (roleID) { case 1: role = Role.Owners.Clone();//Role.CreateManagerRole(); //role.RoleID = newRoleID; role.Title = roleName; break; case 2: role = Role.Administrators.Clone(); //role.RoleID = newRoleID; role.Title = roleName; break; case 3: role = Role.SuperModerators.Clone(); //role.RoleID = newRoleID; role.Title = roleName; break; case 5: role = Role.CreateNormalRole(); role.RoleID = vipRoleID; role.Name = roleName; role.Title = roleName; break; default: if (roleID > 8) { role = Role.CreateNormalRole(); role.RoleID = newRoleID; role.Name = roleName; } else continue; break; } newRoles.Set(role); #endregion } if (reader.NextResult()) { while (reader.Read()) { Role role = Role.CreateLevelRole(); role.RequiredPoint = (int)reader["RequirePoints"]; role.RoleID = Guid.NewGuid(); role.Name = (string)reader["LevelName"]; role.Title = role.Name; role.StarLevel = (int)reader["Stars"]; newRoles.Add(role); } } newRoles.Sort(); } sql = @" UPDATE bx_Settings SET [Value] = @RolesString WHERE TypeName = 'MaxLabs.bbsMax.Settings.RoleSettings' AND [Key] = 'Roles'; IF @@ROWCOUNT = 0 INSERT INTO bx_Settings ([Key], [Value], [TypeName]) VALUES ('Roles', @RolesString, 'MaxLabs.bbsMax.Settings.RoleSettings'); IF EXISTS (SELECT * FROM [sysobjects] WHERE [type]='U' AND [name]='Max_UsersInRoles') BEGIN truncate table [bx_UserRoles]; UPDATE Max_Roles SET NewRoleID = @NewRoleID1 WHERE RoleID = 1; UPDATE Max_Roles SET NewRoleID = @NewRoleID2 WHERE RoleID = 2; UPDATE Max_Roles SET NewRoleID = @NewRoleID3 WHERE RoleID = 3; UPDATE Max_Roles SET NewRoleID = @NewRoleID5 WHERE RoleID = 5; INSERT INTO [bx_UserRoles] ([UserID] ,[RoleID] ,[BeginDate] ,[EndDate]) SELECT u.UserID,--(<UserID, int,> r.NewRoleID,--,<RoleID, uniqueidentifier,> u.EnabledDate,--,<BeginDate, datetime,> u.ExpiresDate--,<EndDate, datetime,>) FROM Max_UsersInRoles u WITH (NOLOCK) INNER JOIN Max_Roles r WITH (NOLOCK) ON u.RoleID = r.RoleID WHERE u.RoleID IN (1,2,3,5) OR u.RoleID > 8; DROP TABLE Max_UsersInRoles; END DROP TABLE Max_Roles; "; command.CommandTimeout = 3600; command.CommandText = sql; command.Parameters.AddWithValue("@NewRoleID1", Role.Owners.RoleID); command.Parameters.AddWithValue("@NewRoleID2", Role.Administrators.RoleID); command.Parameters.AddWithValue("@NewRoleID3", Role.SuperModerators.RoleID); command.Parameters.AddWithValue("@NewRoleID5", vipRoleID); SqlParameter param = new SqlParameter("@RolesString", SqlDbType.NText); param.Value = newRoles.GetValue(); command.Parameters.Add(param); command.ExecuteNonQuery(); } catch (Exception ex) { CreateLog(ex); throw new Exception("�����û�������ʧ��" + ex.Message + sql); } finally { connection.Close(); } } }