提取aspnet_Profile中自定义的用户属性(C#实现)
来源:互联网 发布:天涯骑白马的农民 知乎 编辑:程序博客网 时间:2024/04/28 18:29
特殊需求
一个非常特别需求,需要提取aspnet_Profile中自定义的用户属性。这个特殊的需求是这样的:
提取用户的属性列表,我的机器只能访问开发库,没法访问生产库。DBA也比较忙,于是乎就把原始数据拿了过来,用程序进行分解。
Profile对象存储表(aspnet_Profile)
字段名
类型
属性
说明
UserId
uniqueidentifier
FK: aspnet_Users.UserId
用户ID
PropertyNames
ntext
属性名称
PropertyValuesString
ntext
字符串值
PropertyValuesBinary
image
二进制值
数据是这个样子的:
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中的属性值
/// </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;
}
效果
客服800
c1
201李 X
leey
财务
801c2
202李 Y
leez
代理商
801c3
203李 Z
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- C#自定义属性实现
- C#中自定义属性的例子
- C#中自定义属性的例子
- C#中自定义属性的例子
- C#中自定义属性的例子
- C#中自定义属性的例子
- 用SQL语句从aspnet_profile表里取用户的Profile值
- MFC中用户自定义消息的实现
- spring中自定义属性编辑器的实现
- Android中给自定义的控件实现自定义的属性
- C# 中自定义消息的实现
- c#中自定义集合的实现
- 自定义属性的实现
- 在用户控件中自定义属性
- Web用户空件的属性中自定义属性的设置和使用
- C#中自定义控件隐藏基类成员(属性、方法和事件)的方法
- 4x8c液晶汉字加字符全屏显示
- Linux设备驱动的分层设计思想
- 彻底明白IP地址(2)
- 史上最牛的Crossword
- USB中的 struct usb_driver; struct usb_device_driver;
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- 算法导论学习笔记-第五章-概率分析和随机算法
- [图示]营销理论:不同时代的用户如何接受一个新事物?
- “apache2: Could not reliably determine the server’s fully qualified domain name”的解法
- 给年轻工程师的十大忠告
- 4x8c液晶加不同键盘按键控制不同输出显示
- 让我兴奋的一个帖子
- 准备开发iphone应用
- 复制DataTable的到新的DataTable