public class ORM
{
//保存连接字符串
private string connString;
//构造函数
public ORM(string connString)
{
this.connString = connString;
}
/// <summary>
/// 添加方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public int Add<T>(T obj)
{
StringBuilder sbSql = new StringBuilder();//创建Sql语句
sbSql.Append("insert into ");
//获取表名
Type type = obj.GetType();
//获取当前类型上声明的特性
TableAttribute[] tables =(TableAttribute [])type.GetCustomAttributes(typeof(LORM.TableAttribute),false);
sbSql.Append(tables[0].TableName);//通过特性获取数据库中数据表的名称
//获取列名列表和值的列表
string columnNames = string.Empty;//列名列表
string values = string.Empty;//值的列表
//通过反射获取当前类型的属性
PropertyInfo[] tablePropertys = type.GetProperties();
foreach (PropertyInfo property in tablePropertys)
{
//当前属性上的特性
ColumnAttribute[] columns = (ColumnAttribute[])property.GetCustomAttributes(typeof(LORM.ColumnAttribute), false);
//是否为标识列
if (columns[0].IsIdentify )
{
continue;
}
columnNames += columns[0].ColumnName + ",";//列名列表
//值的列表
values += Common.GetDBValue(columns[0].ColumnType,Convert.ToString(property.GetValue(obj,null))) + ",";//值的列表
}
columnNames = columnNames.Substring(0, columnNames.Length - 1);
values = values.Substring(0, values.Length - 1);
//组装Sql语句
sbSql.AppendFormat(" ({0}) values ({1}) ", columnNames, values);
return DBHelper.ExecuteCommand(connString,sbSql.ToString());
}
/// <summary>
/// 查询数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public IList<T> GetDataList<T>()
{
IList<T> list = new List<T>();
StringBuilder sbSql = new StringBuilder();//保存Sql语句
Type type = typeof(T);
TableAttribute[] tables = (TableAttribute[])type.GetCustomAttributes(typeof(LORM.TableAttribute), false);
sbSql.AppendFormat("select * from {0} ", tables[0].TableName);//通过特性得到数据表的名称
PropertyInfo[] tablePropertys = type.GetProperties();//通过反射得到类的属性
using (SqlDataReader reader = DBHelper.GetReader(connString, sbSql.ToString()))
{
while (reader.Read())
{
//创建对象
T objT = Activator.CreateInstance<T>();
//循环设置属性值
foreach (PropertyInfo property in tablePropertys)
{
ColumnAttribute[] columns = (ColumnAttribute[])property.GetCustomAttributes(typeof(LORM.ColumnAttribute), false);
//通过特性获取列名,设置属性值
property.SetValue(objT, Common.SetDBValue(columns[0].ColumnType,reader[columns[0].ColumnName]), null);
}
list.Add(objT);
}
reader.Close();
}
return list;
}
public IList<T> GetDataList<T>(string query)
{
IList<T> list = new List<T>();
StringBuilder sbSql = new StringBuilder();
Type type = typeof(T);
TableAttribute[] tables = (TableAttribute[])type.GetCustomAttributes(typeof(LORM.TableAttribute), false);
if (query != string.Empty)
{
query = "where " + query;
}
sbSql.AppendFormat("select * from {0} {1}", tables[0].TableName,query);
PropertyInfo[] tablePropertys = type.GetProperties();
using (SqlDataReader reader = DBHelper.GetReader(connString, sbSql.ToString()))
{
while (reader.Read())
{
T objT = Activator.CreateInstance<T>();
foreach (PropertyInfo property in tablePropertys)
{
ColumnAttribute[] columns = (ColumnAttribute[])property.GetCustomAttributes(typeof(LORM.ColumnAttribute), false);
property.SetValue(objT, Common.SetDBValue(columns[0].ColumnType, reader[columns[0].ColumnName]), null);
}
list.Add(objT);
}
reader.Close();
}
return list;
}
}
}