#region 动态查询的方式使用泛型+反射 //sql语句 select *from student public static List<T> Query(string where) { DataTable tb = new DataTable(); List<T> list = new List<T>(); // string sql = GetQuerySql(); sql += where; //用反射赋值 using (SqlConnection connection = new SqlConnection(con)) { connection.Open(); using (SqlCommand command = new SqlCommand(sql, connection)) { SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(command); sqlDataAdapter.Fill(tb); //获取T的类型 Type type = typeof(T); //循环循环行 for (int i = 0; i < tb.Rows.Count; i++) { //实例化T,每一次都需要实例化new 对象 Object obj = Activator.CreateInstance(type); //循环列 for (int j = 0; j < tb.Columns.Count; j++) { //获取列的名称 student s_id GetProperty("s_id") PropertyInfo info = type.GetProperty(tb.Columns[j].ColumnName);//赋值了s_id //判断类型 tb.Columns[j].DataType 获取数据库列的类型 #region 类型的判断并赋值 //int类型 if (tb.Columns[j].DataType == typeof(Int32)) { //有没有可能空值? if (tb.Rows[i][j] != null) { //obj.setValue(info,12); info.SetValue(obj, int.Parse(tb.Rows[i][j].ToString()), null); } else { //null值的情况 info.SetValue(obj, 0, null); } } //float类型 else if (tb.Columns[j].DataType == typeof(float)) { //有没有可能空值? if (tb.Rows[i][j] != null) { info.SetValue(obj, float.Parse(tb.Rows[i][j].ToString()), null); } else { //null值的情况 info.SetValue(obj, 0.0f, null); } } //datetime else if (tb.Columns[j].DataType == typeof(DateTime)) { //有没有可能空值? if (tb.Rows[i][j] != null) { info.SetValue(obj, DateTime.Parse(tb.Rows[i][j].ToString()), null); } else { //null值的情况 info.SetValue(obj, DateTime.Now, null); } } //double else if (tb.Columns[j].DataType == typeof(double)) { //有没有可能空值? if (tb.Rows[i][j] != null) { info.SetValue(obj, double.Parse(tb.Rows[i][j].ToString()), null); } else { //null值的情况 info.SetValue(obj, 0.00, null); } } else { //string //有没有可能空值? if (tb.Rows[i][j] != null) { info.SetValue(obj, tb.Rows[i][j].ToString(), null); } else { //null值的情况 info.SetValue(obj, "", null); } } #endregion } //将object 类型强转对应的类型 list.Add((T)obj);//(类型)强制转换 } } } return list; } //获取sql public static string GetQuerySql() { Type type = typeof(T); //type.Name获取类的名称 //无需实例化 string sql = "select * from " + type.Name + " where 1=1 "; return sql; } #endregion #region 动态添加的操作 public static int Insert(T models) { int flag = 0; //获取sql string sql = GetInsertSql(models); using (SqlConnection connection = new SqlConnection(con)) { connection.Open(); using (SqlCommand command = new SqlCommand(sql, connection)) { flag = command.ExecuteNonQuery(); } } return flag; } public static string GetInsertSql(T models) { //已实例化的实体用GetType,如果未实例化的我们需要使用typeof Type type = models.GetType();//new 过的对象 //先获取所有的字段 PropertyInfo[] info = type.GetProperties(); //这里是字段 string field = ""; //获取值 string value = ""; for (int i = 0; i < info.Length; i++) { //有可能字段没有值,没有值的我们不添加info 是属性[i]第几个属性 if (info[i].GetValue(models) != null) { if (!info[i].Name.Equals("Id")) { //获取字段和值 if ((i + 1) == info.Length)//代表最后一个循环不要, { field += info[i].Name; value += "'" + info[i].GetValue(models).ToString() + "'";//为什么没有用类型判断, } else { field += info[i].Name + ","; value += "'" + info[i].GetValue(models).ToString() + "',";//为什么没有用类型判断, } } } } //生成了sql语句 string sql = "insert into " + type.Name + "(" + field + ") values(" + value + ")"; return sql; } #endregion #region 动态修改的操作 public static int Update(T models, string where) { int flag = 0; //获取sql string sql = GetUpdateSql(models, where); using (SqlConnection connection = new SqlConnection(con)) { connection.Open(); using (SqlCommand command = new SqlCommand(sql, connection)) { flag = command.ExecuteNonQuery(); } } return flag; } public static string GetUpdateSql(T models, string where) { Type type = models.GetType(); //获取所有的字段 string updateStr = ""; PropertyInfo[] propertyInfos = type.GetProperties(); for (int i = 0; i < propertyInfos.Length; i++) { if (propertyInfos[i].GetValue(models) != null) { if ((i + 1) == propertyInfos.Length) { updateStr += propertyInfos[i].Name + "='" + propertyInfos[i].GetValue(models) + "'"; } else { updateStr += propertyInfos[i].Name + "='" + propertyInfos[i].GetValue(models) + "',"; } } } //update biao set ziduan =zhi where userNAME= string sql = "update " + type.Name + " set " + updateStr + " where 1=1 " + where; return sql; } #endregion #region 动态删除 public static int Delete(T models, string where) { int flag = 0; //获取sql string sql = GetDeleteSql(models, where); using (SqlConnection connection = new SqlConnection(con)) { connection.Open(); using (SqlCommand command = new SqlCommand(sql, connection)) { flag = command.ExecuteNonQuery(); } } return flag; } //删除的sql语句 public static string GetDeleteSql(T models, string where) { Type type = models.GetType(); //获取所有的字段 //delete from 表 where string sql = "delete from " + type.Name + " where 1=1 " + where; return sql; } #endregion
//查询 public List<EmpUserInfo> Query(string where) { return ORMDBhelper<EmpUserInfo>.Query(where); } //插入 public int Insert(EmpUserInfo info) { return ORMDBhelper<EmpUserInfo>.Insert(info); } //修改 public int Update(EmpUserInfo info) { return ORMDBhelper<EmpUserInfo>.Update(info, " and id="+info.Id.ToString()); } //删除 public int Delete(EmpUserInfo info) { return ORMDBhelper<EmpUserInfo>.Delete(info, " and id=" + info.Id.ToString()); }
EmpUserInfoBll bll = new EmpUserInfoBll(); // GET: api/Login [Route("api/query")] [HttpGet] public IHttpActionResult Query(string where) { return Ok(bll.Query(where)); } [HttpPost] [Route("api/insert")] public int Insert(EmpUserInfo info) { return bll.Insert(info); } [HttpPost] [Route("api/update")] public int Update(EmpUserInfo info) { return bll.Update(info); } [HttpPost] [Route("api/delete")] public int DeletePost(EmpUserInfo info) { return bll.Delete(info); }