c# Reflection 反射 简单示例,做小程序时用到了数据库,就随便写的一个通过对象属性成员生成 sql字符串的一个基类,
只是为了满足demo功能所写并不完善,留做笔记,方便日后再次需要时方便查阅。
public class ModelBase
{
public string BuildWhere(string[] fields, string logic = " and ")
{
string strs = "";
Type type = this.GetType();
PropertyInfo[] pros = type.GetProperties();
foreach (PropertyInfo proinfo in pros)
{
if (fields == null)
{
string propeval = GetVal(proinfo);
if ( string.IsNullOrEmpty( propeval)) {
continue;
}
strs += logic;
strs += string.Format(" {0} like '%{1}%' ", proinfo.Name.ToLower(), propeval);
continue;
}
if (fields.Contains(proinfo.Name) || fields.Contains(proinfo.Name.ToLower()))
{
string propeval = GetVal(proinfo);
if (string.IsNullOrEmpty(propeval))
{
continue;
}
strs += logic ;
strs += string.Format(" {0} like '%{1}%' ", proinfo.Name.ToLower(), propeval);
}
}
return strs;
}
public String BuildUpdate(string[] fields,string where = "") {
string strs = "";
Type type = this.GetType();
PropertyInfo[] pros = type.GetProperties();
foreach (PropertyInfo proinfo in pros) {
if ((proinfo.Name.Equals("Id") || proinfo.Name.Equals("id"))
&& where .Equals("")) {
string idval = Convert.ToString( proinfo.GetValue(this,null));
where = string.Format(" id = '{0}' ",idval);
continue;
}
if (fields == null) {
string propeval = GetVal(proinfo);
if (!strs.Equals(""))
{
strs += ",";
}
strs += string.Format(" {0}= '{1}' ", proinfo.Name.ToLower(), propeval);
continue;
}
if (fields.Contains(proinfo.Name) || fields.Contains( proinfo.Name.ToLower())) {
string propeval = GetVal(proinfo);
if (!strs.Equals("")) {
strs += ",";
}
strs += string.Format( " {0}= '{1}' ",proinfo.Name.ToLower(),propeval);
}
}
if (strs == "") {
throw new Exception("未找到任何对应属性");
}
string tablename = type.Name.Replace("Model","").ToLower(); ;
strs = string.Format( " update [{0}] set {1} where {2}",tablename, strs ,where );
return strs;
}
public String BuildAdd(string[] fields = null) {
string strs = "";
string fieldstr = "";
string valstr = "";
Type type = this.GetType();
PropertyInfo[] pros = type.GetProperties();
foreach (PropertyInfo proinfo in pros)
{
if ((proinfo.Name.Equals("Id") || proinfo.Name.Equals("id"))
)
{
continue;
}
if (fields == null) {
string propeval = GetVal(proinfo);
if (!fieldstr.Equals(""))
{
fieldstr += ",";
valstr += ",";
}
fieldstr += proinfo.Name.ToLower() ;
valstr += string.Format("'{0}'", propeval);
continue;
}
if (fields.Contains(proinfo.Name) || fields.Contains(proinfo.Name.ToLower()))
{
string propeval = GetVal(proinfo);
if (!fieldstr.Equals(""))
{
fieldstr += ",";
valstr += ",";
}
fieldstr += proinfo.Name.ToLower();
valstr += string.Format("'{0}'", propeval);
}
}
if (fieldstr == "")
{
throw new Exception("未找到任何对应属性");
}
string tablename = type.Name.Replace("Model", "").ToLower();
strs = string.Format( " insert into [{0}] ({1}) values({2}) ",tablename,fieldstr,valstr);
return strs;
}
public void RowToModel(DataRow row)
{
Type type = this.GetType();
PropertyInfo[] pros = type.GetProperties();
foreach (PropertyInfo proinfo in pros)
{
if (row.Table.Columns.Contains(proinfo.Name.ToLower()))
{
if (proinfo.PropertyType == typeof(DateTime))
{
DateTime dt;
DateTime.TryParse(row[proinfo.Name.ToLower()].ToString(), out dt);
proinfo.SetValue(this, dt, null);
}
else if (proinfo.PropertyType == typeof(int))
{
int intval;
int.TryParse(row[proinfo.Name.ToLower()].ToString(), out intval);
proinfo.SetValue(this, intval, null);
}
else if (proinfo.PropertyType == typeof(long))
{
long longval;
long.TryParse(row[proinfo.Name.ToLower()].ToString(), out longval);
proinfo.SetValue(this, longval, null);
}
else if (proinfo.PropertyType == typeof(float))
{
float floatval;
float.TryParse(row[proinfo.Name.ToLower()].ToString(), out floatval);
proinfo.SetValue(this, floatval, null);
}
else if (proinfo.PropertyType == typeof(double))
{
double doubleval;
double.TryParse(row[proinfo.Name.ToLower()].ToString(), out doubleval);
proinfo.SetValue(this, doubleval, null);
}
else if (proinfo.PropertyType == typeof(MonitorState))
{
MonitorState msval = MonitorState.Normal;
MonitorState.TryParse(row[proinfo.Name.ToLower()].ToString(), out msval);
proinfo.SetValue(this, msval, null);
}
else {
proinfo.SetValue(this, row[proinfo.Name.ToLower()].ToString(), null);
}
}
}
}
private string GetVal(PropertyInfo proinfo) {
string propeval = "";
if (proinfo.PropertyType == typeof(DateTime))
{
DateTime dt = Convert.ToDateTime(proinfo.GetValue(this, null));
propeval = dt.ToString();
} else if (proinfo.PropertyType == typeof(MonitorState))
{
MonitorState ms = MonitorState.Normal;
MonitorState.TryParse(proinfo.GetValue(this, null).ToString(),out ms);
propeval = Convert.ToString((int)ms);
}
else
{
propeval = Convert.ToString(proinfo.GetValue(this, null));
}
return propeval;
}
}
}
用户今天 : 3
用户昨天 : 15
用户最近的7天 : 69
用户最近的30天 : 283
用户这个月 : 229
用户这一年 : 4357
合计用户 : 6149
查看今天 : 7
查看昨天 : 15
查看最近7天 : 74
查看最近30天的 : 306
查看这个月 : 242
查看这一年 : 4829
合计查看 : 7484
谁是在线的 : 0