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() {
}
}