using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Reflection;
using System.ComponentModel.DataAnnotations;
using MODEL;
using Dapper;

namespace DAL
{
    public class ORMHelper: ConfigurationBaseDal
    {
        #region 批量查询
        /// <summary>
        /// 数据库链接字符串
        /// </summary>
        private static string SQLStr = "Data Source=.;Initial Catalog=Students;Persist Security Info=True;User ID=sa;Password=root;";
        public   List<T> GetAll<T>() where T : class, new()//定义一个泛型,和泛型约束
        {
            string sqlFormat = "select {0} from {1}";//定义基结构
            Type type = typeof(T);//反射实体类
            var pi = type.GetProperties();
            string csStr = string.Join(",", pi.Select(o => o.Name));
            sqlFormat = string.Format(sqlFormat, csStr, type.Name);
            SqlConnection conn = new SqlConnection(SQLStr);
            DataTable dt = new DataTable();
            try
            {
                SqlDataAdapter dap = new SqlDataAdapter(sqlFormat, conn);//一次性加载数据库中所有属性,可以脱离链接进行操作,返回一个dataset对象
                dap.Fill(dt);
                List<T> list = new List<T>();
                ; i < dt.Rows.Count; i++)
                {
                    T t = new T();
                    foreach (var  pro in pi)
                    {
                        if (dt.Columns.Contains(pro.Name))
                        {
                            if (!(dt.Rows[i][pro.Name] is DBNull))//判断是否为空
                            {
                                pro.SetValue(t, dt.Rows[i][pro.Name]);
                            }
                        }
                    }
                    list.Add(t);
                }
                return list;
            }
            catch (Exception ex)
            {

                throw ex ;
            }
        }
        #endregion

        #region 条件查询
        /// <summary>
        /// 根据条件查询,也许有问题,讲师返回的是泛型T,而我经过改进返回的数值类型是datatable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="id"></param>
        /// <returns></returns>
        public  List<OrmsTable> GetModel<T>(OrmsTable model) where T : class, new()
        {
            string whereStr = "";
            string sqlStr = "select {0} from {1} where 1=1 {2}";
            Type typeT = typeof(T);
            PropertyInfo[] pi = typeT.GetProperties();
            string[] pNames = pi.Select(o => o.Name).ToArray();
            string fieldStr = string.Join(",", pNames);//ID,name,chinese,enume"
            pNames = pi.Where(p => p.GetCustomAttribute(typeof(KeyAttribute), false) != null).Select(o => o.Name).ToArray();
            )
            {
                whereStr = ],model.Zhuangtai);//例如:and id=1;
            }
            sqlStr = string.Format(sqlStr, fieldStr, typeT.Name, whereStr);//select ID,name,chinese,enume from Class1 where 1=1  and ID = 1 

             var dt =CurrentDbConn.Query<OrmsTable>(sqlStr)?.ToList();
            return dt;
        }
        #endregion

        #region 添加数据
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <returns></returns>
        //public static int Insert<T>(T model)
        //{
        //    string sqlStr = "insert into {0}({1}) values({2})";
        //    string tbNameStr = string.Empty;
        //    string feildNameStr = string.Empty;
        //    string valStr = string.Empty;

        //    Type typeT = typeof(T);
        //    tbNameStr = typeT.Name;
        //    PropertyInfo[] pis = typeT.GetProperties();
        //    feildNameStr = string.Join(",", pis.Where(p => p.GetCustomAttribute(typeof(KeyAttribute), false) == null).Select(o => o.Name));
        //    valStr = string.Join(",", pis.Where(p => p.GetCustomAttribute(typeof(KeyAttribute), false) == null).Select(o => "@" + o.Name));
        //    sqlStr = string.Format(sqlStr, tbNameStr, feildNameStr, valStr);
        //    List<SqlParameter> pList = new List<SqlParameter>();
        //    foreach (PropertyInfo p in pis)
        //    {
        //        object obj = p.GetValue(model);
        //        string pName = "@" + p.Name;
        //        SqlParameter sp = new SqlParameter(pName, obj);
        //        pList.Add(sp);
        //    }
        //    return DBHelper.ExecuteNonQuery(sqlStr, pList.ToArray());
        //}
        public  int Insert<T>(T Param) where T : class, new()
        {
            var t = typeof(T);
            string sql = "insert into " + t.Name + " values('";
            foreach (var item in t.GetProperties())
            {
                if(item.PropertyType.Name!="Int32")
                {
                    sql += item.GetValue(Param) + "','";
                }
                else
                {
                    sql += item.GetValue(Param) + ",";
                }
            }
           ,(sql.Length)-);
            st += "')";
            return CurrentDbConn.Execute(st);
        }
        #endregion

        #region 删除
        public  int Delete<T>(T model)
        {
            string sqlStr = "delete from {0} where 1=1 {1}";
            string strWhere = "";
            Type typeT = typeof(T);
            string tbName = typeT.Name;//声明一个变量用来存贮表的名字
            var pi = typeT.GetProperties();
            var pKey = pi.Where(p => p.GetCustomAttribute(typeof(KeyAttribute), false) != null);
            List<SqlParameter> pList = new List<SqlParameter>();
            )
            {
                PropertyInfo pK = pKey.First();
                strWhere = string.Format(" and {0} = @{0}", pK.Name);
                pList.Add(new SqlParameter("@" + pK.Name, pK.GetValue(model)));
            }
            sqlStr = string.Format(sqlStr, tbName, strWhere);
            return CurrentDbConn.Execute(sqlStr, pList.ToArray());
        }
        #endregion

        public  bool Upt<T>(T t) where T : class, new()
        {
            bool ret = false;
            try
            {
                string str = "";
                string str1 = "";
                string sql = "update {0} set {1} where {2}";
                Type tp = typeof(T);
                foreach (var i in tp.GetProperties())
                {
                    var ty = i.PropertyType;
                    var tu = i.GetCustomAttributes(false);
                    )
                    {
                        str1 += " " + i.Name + "='" + i.GetValue(t) + "'";
                    }
                    else
                    {
                        switch (ty.Name)
                        {
                            case "Int32":
                                str += " " + i.Name + " ='" + i.GetValue(t) + "' ,";
                                break;
                            case "String":
                                str += " " + i.Name + " ='" + i.GetValue(t).ToString() + "' ,";
                                break;
                        }
                    }
                }
                str = str.Substring(, str.Length - );
                sql = string.Format(sql, tp.Name, str, str1);
                using (SqlConnection conn = new SqlConnection(SQLStr))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(sql, conn))
                    {
                        cmd.CommandType = CommandType.Text;
                        cmd.ExecuteNonQuery();
                        ret = true;
                    }
                }
            }
            catch (Exception ex)
            {
                ret = false;
            }
            return ret;
        }
    }
}
dapper的连接

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DAL
{
   public  class ConfigurationBaseDal: ParDal
    {
        private string _systemCenterStr = System.Configuration.ConfigurationManager.ConnectionStrings["DbConter"].ConnectionString;

        //这是一个锁为了防止并发的发生
        private object obj = new object();

        private IDbConnection _systemCenterDbConn;

        //定义一个字段
        //利用单例模式来执行连接数据库
        public override IDbConnection CurrentDbConn
        {
            get
            {
                //判断是否与数据库连接
                if (_systemCenterDbConn == null)
                {
                    lock (obj)
                    {
                        if (_systemCenterDbConn == null)
                        {
                            _systemCenterDbConn = new SqlConnection(_systemCenterStr);
                        }
                    }
                }
                return _systemCenterDbConn;
            }
        }
    }
}

ORM的增删查的更多相关文章

  1. [开源]无sql之旅-Chloe.ORM之增删查改

    扯淡 这是一款轻量.高效的.NET C#数据库访问框架(ORM).查询接口借鉴 Linq(但不支持 Linq).借助 lambda 表达式,可以完全用面向对象的方式就能轻松执行多表连接查询.分组查询. ...

  2. 4.在MVC中使用仓储模式进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 系列目录: ...

  3. SSH框架的多表查询和增删查改 (方法一)中

    原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>http://www.cnblogs.com/zhu520/p/7774144.html   这边文章是接的刚刚前一遍的基础上敲的  ...

  4. SSH框架的多表查询(方法二)增删查改

     必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html  一:在前一个方法(http://www.cnblogs.com/zhu520/p ...

  5. SSH2 增删查改实例

    (一)引入包 (共73个,不一定都需要,但是我的项目是这么多,经过调试,没有包冲突) (二)创建数据库表 建立数据库octtest,并创建user表,表里面一共4个字段:id,姓,名,年龄. 语句如下 ...

  6. mybatis、spring、mysql、maven实现简单增删查改

    之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...

  7. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  8. 3.EF 6.0 Code-First实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-entity-framework-5-0-code- ...

  9. 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

随机推荐

  1. 详谈kafka的深入浅出

    第一:kafka的介绍,kafka官网:http://kafka.apache.org/ http://www.jasongj.com/2015/03/10/KafkaColumn1/ kafka的简 ...

  2. MD5加密过时方法替换

    使用System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile进行MD5加密时,会出现已过时 /// < ...

  3. yarn的工作原理

    1.YARN 是什么? 从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看,MapReduce的 JobTracker/TaskTracker 机制需要大规模的调整来修复它在可扩展性, ...

  4. swust oj 1010

    折半查找的实现 1000(ms) 10000(kb) 2877 / 11213 编写程序实现折半查找算法. 输入 第一行是查找表的长度n 第二行是查找表中的数据元素 : 第三行是要查找的数据元素的关键 ...

  5. jieba库的使用与词频统计

    1.词频统计 (1)词频分析是对文章中重要词汇出现的次数进行统计与分析,是文本 挖掘的重要手段.它是文献计量学中传统的和具有代表性的一种内容分析方法,基本原理是通过词出现频次多少的变化,来确定热点及其 ...

  6. js面向对象和php面向对象的区别

    ---恢复内容开始--- js的面向对象 1.类 具体相同的特征的一些对象的集合. 2.对象 具体到某一个失误了都可以叫做对象. 3.类  通过function 定义类  所以在js里类的本质是函数, ...

  7. QEMU KVM Libvirt手册(9): network

    虚拟网卡由-net nic定义 # qemu-system-x86_64 -enable-kvm -name ubuntutest  -m 2048 -hda ubuntutest.img -vnc ...

  8. 关于H5页面的测试总结与分析

    一.时下最流行的H5到底是什么 ?有什么优势和劣势? (1)H5 即HTML5,其实就是:移动端Web页面. (2)优势: H5可以跨平台使用,开发成本相对较低 H5可随时上线就更新版本,适合快速迭代 ...

  9. [Swift]LeetCode265.粉刷房子 II $ Paint House II

    There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin ...

  10. openstack快速安装之packstack

    最简单的openstack安装方式之packstack 一.环境准备 我们安装的是all-in-one环境的openstack,测试机IP:192.168.1.10 [root@openstack ~ ...