C#——反射的簡單應用

public static Mapping ToInsetSql<T>(this T t) where T : class, new() {
    PropertyInfo[] propertyInfos = t.GetType().GetProperties();
    MappingModel mappingModel = new MappingModel();
    List<OleDbParameter> parameters = new List<OleDbParameter>();
    StringBuilder fieldBuilder = new StringBuilder("");
    StringBuilder fieldValueBuilder = new StringBuilder("");
    foreach (PropertyInfo propertyInfo in propertyInfos) {
        bool flag = propertyInfo.IsDefined(typeof(IgnoreAttribute), false);
        if (flag) {
            continue;
        }
        fieldBuilder.Append(propertyInfo.Name);
        fieldBuilder.Append(",");

        fieldValueBuilder.Append("@");
        fieldValueBuilder.Append(propertyInfo.Name);
        fieldValueBuilder.Append(",");
        string type = propertyInfo.PropertyType.Name;
        object obj = propertyInfo.GetValue(t, null);
        OleDbParameter parameter = new OleDbParameter(propertyInfo.Name, GetOleDbType(type));
        if (obj == null) {
            parameter.Value = DBNull.Value;
        } else {
            parameter.Value = obj;
        }
        parameters.Add(parameter);
    }
    string fieldStr = fieldBuilder.ToString();
    fieldStr = fieldStr.Remove(fieldStr.Length - 1, 1);
    string fieldValueStr = fieldValueBuilder.ToString();
    fieldValueStr = fieldValueStr.Remove(fieldValueStr.Length - 1, 1);
    string tableName = t.GetType().Name;
    string inesrtSql = string.Format("insert into {0} ({1}) values ({2})", tableName, fieldStr, fieldValueStr);
    mapping.sqlStr = inesrtSql;
    mapping.parameters = parameters;
    return mapping;
}

public static Mapping ToUpdateSql<T>(this T t) where T : class, new() {
    PropertyInfo[] propertyInfos = t.GetType().GetProperties();
    MappingModel mappingModel = new MappingModel();
    List<OleDbParameter> parameters = new List<OleDbParameter>();
    StringBuilder fieldBuilder = new StringBuilder("");
    foreach (PropertyInfo propertyInfo in propertyInfos) {
        bool flag = propertyInfo.IsDefined(typeof(IgnoreAttribute), false);
        if (flag) {
            continue;
        }
        fieldBuilder.Append(propertyInfo.Name);
        fieldBuilder.Append("=@");
        fieldBuilder.Append(propertyInfo.Name);
        fieldBuilder.Append(",");
        string type = propertyInfo.PropertyType.Name;
        object obj = propertyInfo.GetValue(t, null);
        OleDbParameter parameter = new OleDbParameter(propertyInfo.Name, GetOleDbType(type));
        if (obj == null) {
            parameter.Value = DBNull.Value;
        } else {
            parameter.Value = obj;
        }
        parameters.Add(parameter);
    }

    StringBuilder WhereCauseBuilder = new StringBuilder("");
    foreach (PropertyInfo propertyInfo in propertyInfos) {
        bool flag = propertyInfo.IsDefined(typeof(UpdateKeyAttribute), false);
        if (flag) {
            WhereCauseBuilder.Append(propertyInfo.Name);
            WhereCauseBuilder.Append("=@");
            WhereCauseBuilder.Append(propertyInfo.Name);
            string type = propertyInfo.PropertyType.Name;
            object obj = propertyInfo.GetValue(t, null);
            OleDbParameter parameter = new OleDbParameter(propertyInfo.Name, GetOleDbType(type));
            if (obj == null) {
                parameter.Value = DBNull.Value;
            } else {
                parameter.Value = obj;
            }
            parameters.Add(parameter);
            break;
        }
    }
    string fieldStr = fieldBuilder.ToString();
    fieldStr = fieldStr.Remove(fieldStr.Length - 1, 1);
    string wherecause = WhereCauseBuilder.ToString();
    string tableName = t.GetType().Name;
    string updateSql = string.Format("update {0} set {1} where {2}", tableName, fieldStr, wherecause);
    mapping.sqlStr = updateSql;
    mapping.parameters = parameters;
    return mapping;
}
[AttributeUsage(AttributeTargets.Property)]
public class IgnoreAttribute : Attribute{
    public IgnoreAttribute() {
        
    }
}


[AttributeUsage(AttributeTargets.Property)]
public class UpdateKeyAttribute : Attribute {
    public UpdateKeyAttribute() {
     
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章