IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> C#反射获取实体类对象属性拼接生成增删改SQL语句完整实例源码 -> 正文阅读

[大数据]C#反射获取实体类对象属性拼接生成增删改SQL语句完整实例源码

1.创建一个SQL生成帮助类分别写出以下增删改三个公共方法
数据插入方法

 public static int Save(object obj)
        {
            int n = 0;
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                StringBuilder sql = new StringBuilder();
                StringBuilder sqlend = new StringBuilder();
                //获取对象的属性数组
                PropertyInfo[] pro = obj.GetType().GetProperties();
                //主键属性数组
                List<PropertyInfo> idlist = GetIdProperty(pro);
                //要更新的数据表
                string table = FindPropertyInfoValue(obj, "TableName").ToString();
                //执行的sql语句
                string sqltext = string.Empty;
                //INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
                sql.Append("INSERT INTO " + table + "(");
                sqlend.Append(" VALUES (");

                foreach (PropertyInfo item in pro)
                {//拼接sql语句主体
                    if (item.Name == "TableName")
                    {
                        continue;
                    }
                    else
                    {
                        string columnValue = item.GetValue(obj, null) + "";
                        if (string.IsNullOrEmpty(columnValue))
                        {//去掉空属性
                            continue;
                        }
                        if (item.PropertyType == typeof(DateTime))
                        {//时间属性初始化时未赋值会变为默认最小值
                            DateTime dt;
                            DateTime.TryParse(columnValue, out dt);
                            if (dt <= SqlDateTime.MinValue.Value)
                                continue;
                        }
                        sql.Append(" " + item.Name + ",");
                        sqlend.Append(" '" + columnValue + "',");
                    }
                }
                string start = sql.ToString();
                start = start.Substring(0, start.Length - 1) + ")";
                string end = sqlend.ToString();
                end = end.Substring(0, end.Length - 1) + ")";
                sqltext = start + end;
                using (SqlCommand cmd = new SqlCommand(sqltext, conn))
                {
                    n = cmd.ExecuteNonQuery();
                }
            }
            return n;
        }

数据删除方法

  public static int DeleteById(object pdata)
        {
            int n = 0;//影响的行数
            PropertyInfo[] pro = pdata.GetType().GetProperties();//获取传来的对象的属性
            List<PropertyInfo> idlist = GetIdProperty(pro);//找到主键属性
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                StringBuilder sql = new StringBuilder();
                StringBuilder sqlend = new StringBuilder();
                string table = FindPropertyInfoValue(pdata, "TableName").ToString();
                string sqltext = string.Empty;

                sql.AppendFormat("delete from {0} where", table);
                foreach (PropertyInfo item in idlist)
                {
                    sql.Append(" " + item.Name + " = '" + item.GetValue(pdata, null) + "'");
                }
                sqltext = sql.ToString();
                using (SqlCommand cmd = new SqlCommand(sqltext, conn))
                {
                    n = cmd.ExecuteNonQuery();
                }
            }
            return n;
        }

数据修改方法

   public static int Update(object obj)
        {
            int n = 0;
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                StringBuilder sql = new StringBuilder();
                StringBuilder sqlend = new StringBuilder();
                //获取对象的属性数组
                PropertyInfo[] pro = obj.GetType().GetProperties();
                //主键属性数组
                List<PropertyInfo> idlist = GetIdProperty(pro);
                //要更新的数据表
                string table = FindPropertyInfoValue(obj, "TableName").ToString();
                //执行的sql语句
                string sqltext = string.Empty;
                //UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 and  列2=某值
                sql.Append("UPDATE " + table + " set");
                sqlend.Append("WHERE");
                //拼接sql语句主体
                foreach (PropertyInfo item in pro)
                {
                    if (item.Name == "TableName")
                    {
                        continue;
                    }
                    else
                    {
                        sql.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "',"+"");
                    }
                }
                //根据主键增加定位条件
                foreach (PropertyInfo item in idlist)
                {
                    sqlend.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "'"+" and ");
                }
                string start = sql.ToString();
                start = start.Substring(0, start.Length - 1) + " ";
                string end = sqlend.ToString();
                end = end.Substring(0, end.Length - 5) + " ";
                sqltext = start + end;
                using (SqlCommand cmd = new SqlCommand(sqltext, conn))
                {
                    n = cmd.ExecuteNonQuery();
                }
            }
            return n;
        }

2.编写 一个数据对象抽象类
生成的数据表永远是动态的所以这里定义成抽象类,便于实体数据类继承和具体实现

 public abstract class ObjectData
    {
        /// <summary>
        /// 数据表名
        /// </summary>
        public abstract string TableName
        {
            get;set;
        }
        public virtual bool Delete()
        {
            if (DAL.GenratesSQLHelp.DeleteById(this) > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public virtual bool Save()
        {
            if (DAL.GenratesSQLHelp.Save(this) > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public virtual bool Update()
        {
            if (DAL.GenratesSQLHelp.Update(this) > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

3.定义一个数据实体类继承数据对象抽象类

 public class Empinfo:BLL.ObjectData
    {
        [KeyFlagAttribute(true)]
        public int  empid { get; set; }
        public string empName { get; set; }
        public DateTime empBirth { get; set; }
        public string empsex { get; set; }
        public string emptel { get; set; }
        public int deptid { get; set; }
        public override bool Save()
        {
            return base.Save();
        }
        public override bool Delete()
        {
            return base.Delete();
        }
        public override bool Update()
        {
            return base.Update();
        }
        public override T Get<T>(T pobj)
        {
            return base.Get<T>(pobj);
        }
        public override string TableName
        {
            get;set;
        }
    }

4 .主函数方法内调用执行

  static void Main(string[] args)
        {
            //增
            Empinfo emp = new Empinfo();
            string table = "Empinfo";
           /emp.TableName = table;
            emp.empid = 7;
            emp.empName = "张峰";
            emp.empBirth = DateTime.Now;
            emp.empsex = "男";
            emp.emptel = "12345678";
            emp.deptid = 2;
            emp.Save();
            //删
            Empinfo emp = new Empinfo();
            string table = "Empinfo";
            emp.TableName = table;
            emp.empid = 7;
            emp.Delete();
            //改
            Empinfo emp = new Empinfo();
            string table = "Empinfo";
            emp.TableName = table;
            emp.empName = "张三丰";
            emp.empsex = "男";
            emp.emptel = "12345678910";
            emp.deptid = 1;
            emp.empBirth = Convert.ToDateTime("2004-03-05");
            emp.deptid = 1;
            emp.empid = 6;
            emp.Update();

        }
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:56:15  更:2022-04-28 11:57:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:26:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码