我发一贴吧,相信很多人用Profile存储用户信息如公司名称等,但是在后台想用列表的方式列出来,却是很难,试试我的方法吧。
1. 在数据库里建一视图:view_Profile
SELECT dbo.aspnet_Users.ApplicationId, dbo.aspnet_Users.UserName, 
      dbo.aspnet_Profile.PropertyNames, dbo.aspnet_Profile.PropertyValuesString, 
      dbo.aspnet_Profile.PropertyValuesBinary
FROM dbo.aspnet_Profile INNER JOIN
      dbo.aspnet_Users ON dbo.aspnet_Profile.UserId = dbo.aspnet_Users.UserId
2.在数据库里建一存储过程:proc_Profile_GetProfiles
CREATE PROCEDURE dbo.proc_Profile_GetProfiles
    @ApplicationName      nvarchar(256)
AS
BEGIN
    DECLARE @ApplicationId uniqueidentifier
    SELECT  @ApplicationId = NULL
    SELECT  @ApplicationId = ApplicationId FROM dbo.aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
    IF (@ApplicationId IS NULL)
        RETURN
    SELECT UserName, PropertyNames, PropertyValuesString, PropertyValuesBinary
    FROM         dbo.view_Profile
    WHERE ApplicationId = @ApplicationIdEND3. 建一个新类:QwpUserController
    public class QwpUserController
    {
        public static List<ProfileBase> GetUsers()
        {
            Type type = HttpContext.Current.Profile.GetType();
            Database db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("proc_Profile_GetProfiles");
            db.AddInParameter(dbCommand, "ApplicationName", DbType.String, ProfileManager.Provider.ApplicationName);
            SqlDataReader reader1 = (SqlDataReader)db.ExecuteReader(dbCommand);            List<ProfileBase> list = null;
            if(reader1.HasRows)
                list = new List<ProfileBase>();            while (reader1.Read())
            {
                string userName = null;
                string[] textArray1 = null;
                string text1 = null;
                byte[] buffer1 = null;                userName = reader1.GetString(0);
                textArray1 = reader1.GetString(1).Split(new char[] { ':' });
                text1 = reader1.GetString(2);
                int num1 = (int)reader1.GetBytes(3, (long)0, null, 0, 0);
                buffer1 = new byte[num1];
                reader1.GetBytes(3, (long)0, buffer1, 0, num1);                ProfileBase profile = (ProfileBase)type.GetConstructor(new Type[0]).Invoke(new object[0]);                profile.Initialize(userName, true);
                ParseDataFromDB(textArray1, text1, buffer1, profile.PropertyValues);                list.Add(profile);            }            return list;
        }        static void ParseDataFromDB(string[] names, string values, byte[] buf, SettingsPropertyValueCollection properties)
        {
            if (((names != null) && (values != null)) && ((buf != null) && (properties != null)))
            {
                try
                {
                    for (int num1 = 0; num1 < (names.Length / 4); num1++)
                    {
                        string text1 = names[num1 * 4];
                        SettingsPropertyValue value1 = properties[text1];
                        if (value1 != null)
                        {
                            int num2 = int.Parse(names[(num1 * 4) + 2], CultureInfo.InvariantCulture);
                            int num3 = int.Parse(names[(num1 * 4) + 3], CultureInfo.InvariantCulture);
                            if ((num3 == -1) && !value1.Property.PropertyType.IsValueType)
                            {
                                value1.PropertyValue = null;
                                value1.IsDirty = false;
                                value1.Deserialized = true;
                            }
                            if (((names[(num1 * 4) + 1] == "S") && (num2 >= 0)) && ((num3 > 0) && (values.Length >= (num2 + num3))))
                            {
                                value1.SerializedValue = values.Substring(num2, num3);
                            }
                            if (((names[(num1 * 4) + 1] == "B") && (num2 >= 0)) && ((num3 > 0) && (buf.Length >= (num2 + num3))))
                            {
                                byte[] buffer1 = new byte[num3];
                                Buffer.BlockCopy(buf, num2, buffer1, 0, num3);
                                value1.SerializedValue = buffer1;
                            }
                        }
                    }
                }
                catch
                {
                }
            }
        }    }4. 使用这个类返回List<ProfileBase>马有了。