提取aspnet_Profile中自定义的用户属性(C#实现)

特殊需求

一个非常特别需求,需要提取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李某

C#实现

<!-- <br/ /> <br/ /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ /> http://www.CodeHighlighter.com/<br/ /> <br/ /> --> /// <summary>
/// 获取aspnet_Profile中的属性值
/// </summary>
/// <returns></returns>
private DataTableGetProfileProperty()
{
string sql = @" SELECT
[username]
,[rolename]
,[propertynames]
,[propertyvaluesstring]
FROM[VUserProfile]
" ;
DataSetds
= DBUtility.getDataSet(sql);

// NID,Company,PID,TrueName是自定义的用户属性
DataTabledt = new DataTable();
DataColumnUserName
= new DataColumn( " UserName " , typeof ( string ));
DataColumnRoleName
= new DataColumn( " RoleName " , typeof ( string ));
DataColumnNID
= new DataColumn( " NID " , typeof ( string ));
DataColumnCompany
= new DataColumn( " Company " , typeof ( string ));
DataColumnPID
= new DataColumn( " PID " , typeof ( string ));
DataColumnTrueName
= 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 ++ )
{
DataRowrow
= 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();

DataRowdtrow
= 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

你可能感兴趣的:(sql,C++,c,C#,J#)