• 用GridView列出Profile存储的全部用户信息如公司名称等


    相信很多人用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 = @ApplicationId
    END

    3. 建一个新类: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>
    就有了。
  • 相关阅读:
    面向对象三大特征之多态——Java笔记(七)
    面向对象三大特征之继承(extends)——Java笔记(六)
    this、访问修饰符——Java笔记(五)
    面向对象三大特征之封装与static——(Java学习笔记四)
    初识Java——(Java学习笔记一)
    HTTP/3 简介
    iis 500.19错误解决过程记录
    排序陷阱 List.Sort Linq.OrderBy
    锁的封装 读写锁、lock
    时间“Thu Aug 14 2014 14:28:06 GMT+0800”的转换
  • 原文地址:https://www.cnblogs.com/sshh/p/1368927.html
Copyright © 2020-2023  润新知