提取aspnet_Profile中自定义的用户属性(C#实现)
2010-05-21 12:24
393 查看
特殊需求
一个非常特别需求,需要提取aspnet_Profile中自定义的用户属性。这个特殊的需求是这样的:
提取用户的属性列表,我的机器只能访问开发库,没法访问生产库。DBA也比较忙,于是乎就把原始数据拿了过来,用程序进行分解。
Profile对象存储表(aspnet_Profile)
数据是这个样子的:
C#实现
/// <summary>
/// 获取 aspnet_Profile中的属性值
/// </summary>
/// <returns></returns>
private DataTable GetProfileProperty()
{
string sql = @"SELECT
[username]
, [rolename]
, [propertynames]
, [propertyvaluesstring]
FROM [VUserProfile]";
DataSet ds = DBUtility.getDataSet(sql);
//NID,Company,PID,TrueName是自定义的用户属性
DataTable dt = new DataTable();
DataColumn UserName = new DataColumn("UserName", typeof(string));
DataColumn RoleName = new DataColumn("RoleName", typeof(string));
DataColumn NID = new DataColumn("NID", typeof(string));
DataColumn Company = new DataColumn("Company", typeof(string));
DataColumn PID = new DataColumn("PID", typeof(string));
DataColumn TrueName = new DataColumn("TrueName", typeof(string));
dt.Columns.Add(UserName);
dt.Columns.Add(RoleName);
dt.Columns.Add(NID);
dt.Columns.Add(Company);
dt.Columns.Add(PID);
dt.Columns.Add(TrueName);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
DataRow row = ds.Tables[0].Rows[i];
string username = row["username"].ToString();
string rolename = row["rolename"].ToString();
string propertynames = row["propertynames"].ToString().Replace(":S:", "*");
string propertyvaluesstring = row["propertyvaluesstring"].ToString();
DataRow dtrow = dt.NewRow();
dtrow["UserName"] = username;
dtrow["RoleName"] = rolename;
string[] p1 = propertynames.Split('*');
for (int j = 0; j < p1.Length - 1; j++)
{
string[] tmp = p1[j].Split(':');
string[] tmp2 = p1[j + 1].Split(':');
string propertyname = tmp[tmp.Length - 1];
string propertyvalue = propertyvaluesstring.Substring(int.Parse(tmp2[0]), int.Parse(tmp2[1]));
dtrow[propertyname] = propertyvalue;
}
dt.Rows.Add(dtrow);
}
return dt;
}
效果
一个非常特别需求,需要提取aspnet_Profile中自定义的用户属性。这个特殊的需求是这样的:
提取用户的属性列表,我的机器只能访问开发库,没法访问生产库。DBA也比较忙,于是乎就把原始数据拿了过来,用程序进行分解。
Profile对象存储表(aspnet_Profile)
字段名 | 类型 | 属性 | 说明 |
UserId | uniqueidentifier | FK: aspnet_Users.UserId | 用户ID |
PropertyNames | ntext | 属性名称 | |
PropertyValuesString | ntext | 字符串值 | |
PropertyValuesBinary | image | 二进制值 |
propertynames |
NID:S:0:3:Company:S:3:3:PID:S:6:3:TrueName:S:9:2: |
propertyvaluesstring |
338com549李某 |
/// <summary>
/// 获取 aspnet_Profile中的属性值
/// </summary>
/// <returns></returns>
private DataTable GetProfileProperty()
{
string sql = @"SELECT
[username]
, [rolename]
, [propertynames]
, [propertyvaluesstring]
FROM [VUserProfile]";
DataSet ds = DBUtility.getDataSet(sql);
//NID,Company,PID,TrueName是自定义的用户属性
DataTable dt = new DataTable();
DataColumn UserName = new DataColumn("UserName", typeof(string));
DataColumn RoleName = new DataColumn("RoleName", typeof(string));
DataColumn NID = new DataColumn("NID", typeof(string));
DataColumn Company = new DataColumn("Company", typeof(string));
DataColumn PID = new DataColumn("PID", typeof(string));
DataColumn TrueName = new DataColumn("TrueName", typeof(string));
dt.Columns.Add(UserName);
dt.Columns.Add(RoleName);
dt.Columns.Add(NID);
dt.Columns.Add(Company);
dt.Columns.Add(PID);
dt.Columns.Add(TrueName);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
DataRow row = ds.Tables[0].Rows[i];
string username = row["username"].ToString();
string rolename = row["rolename"].ToString();
string propertynames = row["propertynames"].ToString().Replace(":S:", "*");
string propertyvaluesstring = row["propertyvaluesstring"].ToString();
DataRow dtrow = dt.NewRow();
dtrow["UserName"] = username;
dtrow["RoleName"] = rolename;
string[] p1 = propertynames.Split('*');
for (int j = 0; j < p1.Length - 1; j++)
{
string[] tmp = p1[j].Split(':');
string[] tmp2 = p1[j + 1].Split(':');
string propertyname = tmp[tmp.Length - 1];
string propertyvalue = propertyvaluesstring.Substring(int.Parse(tmp2[0]), int.Parse(tmp2[1]));
dtrow[propertyname] = propertyvalue;
}
dt.Rows.Add(dtrow);
}
return dt;
}
效果
UserName | RoleName | NID | CompanyID | PID | TrueName |
---|---|---|---|---|---|
leex | 客服 | 800 | c1 | 201 | 李 X |
leey | 财务 | 801 | c2 | 202 | 李 Y |
leez | 代理商 | 801 | c3 | 203 | 李 Z |
相关文章推荐
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- 在C#中实现自定义属性
- C#笔记1——如何在登录界面设置主界面的ToolStripMenuItem的enabled属性,实现不同用户进入不同模块
- SmartSoft技术管理系统实现之:用C#.Net实现AutoCAD块属性提取
- VS2005下自定义用户控件 如何实现属性及方法的相关智能提示
- VS2005下自定义用户控件 如何实现属性及方法的相关智能提示
- arcengine cliasic code(转)基于ArcGIS Engine + C#实现用户自定义动态电力符号
- VS2005下自定义用户控件 如何实现属性及方法的相关智能提示
- 通过c# 实现自定义属性改变触发自定义事件 ,理解自定义事件及其触发过程
- 用C#.Net实现AutoCAD块属性提取
- C#自定义属性实现
- 基于ArcGIS Engine + C#实现用户自定义动态电力符号(转载 华立电网北京研发中心 阿文 )
- SmartSoft中用C#.Net实现AutoCAD块属性提取
- c# 实现自定义属性改变触发自定义事件
- [重写默认的4个权限设置相关的类:一]实现自定义用户配置提供程序ProfileProvider(转载)
- c#实现隐式的用户自定义类型转换(关键字implicit operator)
- C#实现用户自定义控件中嵌入自己的图标
- C#.Net实现AutoCAD块属性提取
- c#实现显式的用户自定义类型转换(关键字explicit operator)