自动生成sql
添加下面这个类
public static class GetAllAttribute<T> where T : class
    {
        public static string Names;
        public static string Values;
        public static ArrayList array;
        /// <summary>
        /// 获取当前对象的所有属性名称,以逗号隔开
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public static string GetNames(T entity)
        {
            PropertyInfo[] p = entity.GetType().GetProperties();
            string name = string.Empty;
            foreach (PropertyInfo item in p)
            {
                name += item.Name + ",";
            }
            name = name.Substring(0, name.Length - 1);
            return name;
        }
        /// <summary>
        /// 获取当前对象的所有属性值,以逗号隔开
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public static string GetValues(T entity)
        {
            PropertyInfo[] p = entity.GetType().GetProperties();
            string value = string.Empty;
            foreach (PropertyInfo item in p)
            {
                if (item.PropertyType.Name.Equals("String"))
                {
                    value += "'" + item.GetValue(entity, null) + "',";
                }
                if (item.PropertyType.Name.Equals("Int32"))
                {
                    value += item.GetValue(entity, null) + ",";
                }
                if (item.PropertyType.Name.Equals("DateTime"))
                {
                    value += "to_Date('" + item.GetValue(entity, null) + "','yyyy-MM-dd HH:mm:ss'),";
                }
            }
            value = value.Substring(0, value.Length - 1);
            return value;
        }
        /// <summary>
        /// 根据条件设置字段名称和字段对应的值
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="names"></param>
        public static void SetNamesAndValues(T entity, string names)
        {
            Names = string.Empty;
            Values = string.Empty;
string[] _Names = names.Split(',');
            PropertyInfo[] p = entity.GetType().GetProperties();
            foreach (PropertyInfo item in p)
            {
                bool flg1 = false;
                for (int i = 0; i < _Names.Length; i++)
                {
                    string str_Name = _Names[i];
                    bool flg = item.Name.Equals(str_Name);
                    if (flg)
                    {
                        flg1 = true;
                    }
                }
                if (!flg1)
                {
                    Names += item.Name + ",";
                    Values += item.GetValue(entity, null) + ",";
                }
            }
            Names = Names.Substring(0, Names.Length - 1);
            Values = Values.Substring(0, Values.Length - 1);
        }
        /// <summary>
        /// 根据条件设置字段名称和字段对应的值
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="names"></param>
        public static void SetNamesAndValues1(T entity, string names)
        {
            Names = string.Empty;
            Values = string.Empty;
string[] _Names = names.Split(',');
            PropertyInfo[] p = entity.GetType().GetProperties();
            foreach (PropertyInfo item in p)
            {
                bool flg1 = false;
                for (int i = 0; i < _Names.Length; i++)
                {
                    string str_Name = _Names[i];
                    bool flg = item.Name.Equals(str_Name);
                    if (flg)
                    {
                        flg1 = true;
                    }
                }
                if (flg1)
                {
                    Names += item.Name + ",";
                    Values += item.GetValue(entity, null) + ",";
                }
            }
            Names = Names.Substring(0, Names.Length - 1);
            Values = Values.Substring(0, Values.Length - 1);
        }
#region 获取Insert语句
        /// <summary>
        /// 获取Insert语句
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public static string Insert(T entity)
        {
            try
            {
                array = new ArrayList();
                Type type = entity.GetType();
                PropertyInfo[] p = type.GetProperties();
                //表名
                string tableName = "";
                foreach (Object attr in type.GetCustomAttributes(false))// 遍历该属性的所有注解
                {
                    // 判断是否有属性修饰,并判断属性值
                    if (attr is TableAttribute)
                    {
                        TableAttribute currAttribute = attr as TableAttribute;
                        if (!string.IsNullOrEmpty(currAttribute.TableName))
                        {
                            tableName = currAttribute.TableName;
                        }
                    }
                }
                //string strSql = "Insert into " + tableName + "(";
                string strSql = "Insert into {0}({1}) values({2})";
//字段名称列表,以逗号隔开
                string Files = "";
                //字段名称对应的值的列表,以逗号隔开
                string Values = "";
foreach (PropertyInfo item in p)
                {
                    OracleParameter par = null;
//当前字段值
                    string value = item.GetValue(entity, null) + "";
                    string name = item.Name;
                    //当前值的类型(String,Int32,Decimal,Double,DateTime)
                    string Pname = item.PropertyType.Name;
foreach (Object attr in item.GetCustomAttributes(false))// 遍历该属性的所有注解
                    {
                        // 判断当前字段是否是数据库字段
                        if (attr is FieldAttribute)
                        {
                            FieldAttribute fileld = attr as FieldAttribute;
if (!string.IsNullOrEmpty(fileld.Field))
                            {
                                name = fileld.Field;
                            }
                        }
                        // 判断当前字段是否是主键
                        else if (attr is PrimaryKeyAttribute)
                        {
                            PrimaryKeyAttribute currAttribute = attr as PrimaryKeyAttribute;
                            if (!string.IsNullOrEmpty(currAttribute.Id))
                            {
                                name = currAttribute.Id;
                            }
                        }
                        Files += name + ",";
                        Values += ":" + name + ",";
if (Pname.Equals("String"))
                        {
                            par = new OracleParameter(name, OracleDbType.Varchar2);
                            par.Value = value;
                            array.Add(par);
                        }
                        else if (Pname.Equals("Int32"))
                        {
                            par = new OracleParameter(name, OracleDbType.Int32);
                            int temp = Convert.ToInt32(value);
                            if (temp <= -1)
                            {
                                par.Value = DBNull.Value;
                            }
                            else
                            {
                                par.Value = temp;
                            }
                            array.Add(par);
                        }
                        else if (Pname.Equals("Decimal"))
                        {
                            par = new OracleParameter(name, OracleDbType.Decimal);
                            decimal temp = Convert.ToDecimal(value);
                            if (temp <= -1)
                            {
                                par.Value = DBNull.Value;
                            }
                            else
                            {
                                par.Value = temp;
                            }
                            array.Add(par);
                        }
                        else if (Pname.Equals("Double"))
                        {
                            par = new OracleParameter(name, OracleDbType.Double);
                            par.Value = Convert.ToInt32(value);
                            array.Add(par);
                        }
                        else if (Pname.Equals("DateTime"))
                        {
                            par = new OracleParameter(name, OracleDbType.Date);
                            string obj = value;
                            if (!obj.Equals("0001/1/1 0:00:00"))
                            {
                                par.Value = Convert.ToDateTime(value);
                            }
                            else
                            {
                                par.Value = DBNull.Value;
                            }
                            array.Add(par);
                        }
                    }
                    #region 
                    //Files += item.Name + ",";
                    //Values += ":" + item.Name + ",";
//if (item.PropertyType.Name.Equals("String"))
                    //{
                    //    par = new OracleParameter(item.Name, OracleDbType.Varchar2);
                    //    par.Value = item.GetValue(entity, null) + "";
                    //    array.Add(par);
                    //}
                    //else if (item.PropertyType.Name.Equals("Int32"))
                    //{
                    //    par = new OracleParameter(item.Name, OracleDbType.Int32);
                    //    int temp = Convert.ToInt32(item.GetValue(entity, null));
                    //    if (temp <= -1)
                    //    {
                    //        par.Value = DBNull.Value;
                    //    }
                    //    else
                    //    {
                    //        par.Value = temp;
                    //    }
                    //    array.Add(par);
                    //}
                    //else if (item.PropertyType.Name.Equals("Decimal"))
                    //{
                    //    par = new OracleParameter(item.Name, OracleDbType.Decimal);
                    //    par.Value = Convert.ToDecimal(item.GetValue(entity, null));
                    //    array.Add(par);
                    //}
                    //else if (item.PropertyType.Name.Equals("Double"))
                    //{
                    //    par = new OracleParameter(item.Name, OracleDbType.Double);
                    //    par.Value = Convert.ToInt32(item.GetValue(entity, null));
                    //    array.Add(par);
                    //}
                    //else if (item.PropertyType.Name.Equals("DateTime"))
                    //{
                    //    par = new OracleParameter(item.Name, OracleDbType.Date);
                    //    string obj = item.GetValue(entity, null).ToString();
                    //    if (!obj.Equals("0001/1/1 0:00:00"))
                    //    {
                    //        par.Value = Convert.ToDateTime(item.GetValue(entity, null));
                    //    }
                    //    else
                    //    {
                    //        par.Value = DBNull.Value;
                    //    }
                    //    array.Add(par);
                    //}
                    #endregion
                }
                if (!String.IsNullOrEmpty(Files))
                {
                    Files = Files.Substring(0, Files.Length - 1);
                }
                if (!String.IsNullOrEmpty(Values))
                {
                    Values = Values.Substring(0, Values.Length - 1);
                }
//strSql += Files + ") values(" + Values + ")";
strSql = string.Format(strSql, tableName, Files, Values);
return strSql;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion
#region 获取根据主键查询总记录数的语句
        /// <summary>
        /// 获取根据主键查询总记录数的语句
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public static string GetCountById(T entity)
        {
            try
            {
                array = new ArrayList();
                Type type = entity.GetType();
                PropertyInfo[] p = type.GetProperties();
//表名
                string tableName = type.Name;
                foreach (Object attr in type.GetCustomAttributes(false))// 遍历该属性的所有注解
                {
                    // 判断是否有属性修饰,并判断属性值
                    if (attr is TableAttribute)
                    {
                        TableAttribute currAttribute = attr as TableAttribute;
                        if (!string.IsNullOrEmpty(currAttribute.TableName))
                        {
                            tableName = currAttribute.TableName;
                        }
                    }
                }
                //sql语句
                string strSql = "select count(*) from " + tableName + " where ";
//主键(用来做update的where条件)
                OracleParameter parId = null;
foreach (PropertyInfo item in p)
                {
                    //当前字段值
                    string value = item.GetValue(entity, null) + "";
                    string name = item.Name;
foreach (Object attr in item.GetCustomAttributes(false))// 遍历该属性的所有注解
                    {
                        // 判断当前字段是否是主键
                        if (attr is PrimaryKeyAttribute)
                        {
                            PrimaryKeyAttribute currAttribute = attr as PrimaryKeyAttribute;
                            if (!string.IsNullOrEmpty(currAttribute.Id))
                            {
                                name = currAttribute.Id;
                            }
                            if (item.PropertyType.Name.Equals("String"))
                            {
                                strSql += name + "='" + value + "'";
                            }
                            else
                            {
                                strSql += name + "=" + value;
                            }
if (item.PropertyType.Name.Equals("Int32"))
                            {
                                parId = new OracleParameter(name, OracleDbType.Int32);
                                parId.Value = Convert.ToInt32(value);
                            }
                            else if (item.PropertyType.Name.Equals("String"))
                            {
                                parId = new OracleParameter(name, OracleDbType.Varchar2);
                                parId.Value = value;
                            }
                        }
                    }
                    //---------------------end---------------------
                }
if (parId != null)
                {
                    array.Add(parId);
                    return strSql;
                }
                else
                {
                    return "";
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion
#region 获取Update语句
        /// <summary>
        /// 获取Update语句
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public static string Update(T entity)
        {
            try
            {
                array = new ArrayList();
                Type type = entity.GetType();
                PropertyInfo[] p = type.GetProperties();
//表名
                string tableName = type.Name;
                foreach (Object attr in type.GetCustomAttributes(false))// 遍历该属性的所有注解
                {
                    // 判断是否有属性修饰,并判断属性值
                    if (attr is TableAttribute)
                    {
                        TableAttribute currAttribute = attr as TableAttribute;
                        if (!string.IsNullOrEmpty(currAttribute.TableName))
                        {
                            tableName = currAttribute.TableName;
                        }
                    }
                }
                //sql语句
                string strSql = "Update " + tableName + " set ";
//字段名称列表,以逗号隔开
                string Files = "";
string sqlWhere = "";
                //主键(用来做update的where条件)
                OracleParameter parId = null;
foreach (PropertyInfo item in p)
                {
                    //------------update后面的where条件------------
                    OracleParameter par = null;
                    //当前字段值
                    string value = item.GetValue(entity, null) + "";
                    string name = item.Name;
foreach (Object attr in item.GetCustomAttributes(false))// 遍历该属性的所有注解
                    {
                        // 判断当前字段是否是数据库字段
                        if (attr is FieldAttribute)
                        {
                            FieldAttribute fileld = attr as FieldAttribute;
if (!string.IsNullOrEmpty(fileld.Field))
                            {
                                name = fileld.Field;
                            }
                            Files += name + "=:" + name + ",";
if (item.PropertyType.Name.Equals("String"))
                            {
                                par = new OracleParameter(name, OracleDbType.Varchar2);
                                par.Value = value;
                                array.Add(par);
                            }
                            else if (item.PropertyType.Name.Equals("Int32"))
                            {
                                par = new OracleParameter(name, OracleDbType.Int32);
                                int temp = Convert.ToInt32(value);
                                if (temp <= -1)
                                {
                                    par.Value = DBNull.Value;
                                }
                                else
                                {
                                    par.Value = temp;
                                }
                                array.Add(par);
                            }
                            else if (item.PropertyType.Name.Equals("Decimal"))
                            {
                                par = new OracleParameter(name, OracleDbType.Decimal);
                                decimal temp = Convert.ToDecimal(value);
                                if (temp <= -1)
                                {
                                    par.Value = DBNull.Value;
                                }
                                else
                                {
                                    par.Value = temp;
                                }
                                array.Add(par);
                            }
                            else if (item.PropertyType.Name.Equals("Double"))
                            {
                                par = new OracleParameter(name, OracleDbType.Double);
                                par.Value = Convert.ToInt32(value);
                                array.Add(par);
                            }
                            else if (item.PropertyType.Name.Equals("DateTime"))
                            {
                                par = new OracleParameter(name, OracleDbType.Date);
                                string obj = value;
                                if (!obj.Equals("0001/1/1 0:00:00"))
                                {
                                    par.Value = Convert.ToDateTime(value);
                                }
                                else
                                {
                                    par.Value = DBNull.Value;
                                }
                                array.Add(par);
                            }
                        }
                        // 判断当前字段是否是主键
                        else if (attr is PrimaryKeyAttribute)
                        {
                            PrimaryKeyAttribute currAttribute = attr as PrimaryKeyAttribute;
                            if (!string.IsNullOrEmpty(currAttribute.Id))
                            {
                                name = currAttribute.Id;
                            }
                            sqlWhere += " Where " + name + "=:" + name;
if (item.PropertyType.Name.Equals("Int32"))
                            {
                                parId = new OracleParameter(name, OracleDbType.Int32);
                                parId.Value = Convert.ToInt32(value);
                            }
                            else if (item.PropertyType.Name.Equals("Decimal"))
                            {
                                parId = new OracleParameter(name, OracleDbType.Decimal);
                                parId.Value = Convert.ToDecimal(value);
                            }
                            else if (item.PropertyType.Name.Equals("String"))
                            {
                                parId = new OracleParameter(name, OracleDbType.Varchar2);
                                parId.Value = value;
                            }
                        }
                    }
                    //---------------------end---------------------
                }
                if (!String.IsNullOrEmpty(Files))
                {
                    Files = Files.Substring(0, Files.Length - 1);
                }
strSql += Files + sqlWhere;
if (parId != null)
                {
                    array.Add(parId);
                    return strSql;
                }
                else
                {
                    return "";
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion
    }
使用:

自动生成sql的更多相关文章
- 使用Java注解开发自动生成SQL
		使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ... 
- 使用Excel自动生成sql语句
		在近一段日子里,进入了新的项目组,由于项目需要,经常要将一些Excel表中的数据导入数据库中,以前并没有过多的接触过数据导入与数据处理,对于我来说比较痛苦,今天下午花了几个小时处理数据,但是同事给我提 ... 
- 利用反射自动生成SQL语句(仿Linq)
		转:http://www.cnblogs.com/the7stroke/archive/2012/04/22/2465597.html using System; using System.Colle ... 
- springboot+mybatis+mysql    利用mybatis自动生成sql语句
		工具和环境 idea,mysql,JDK1.8 效果图如下 结构图如下 java resources sql文件 /* Navicat MySQL Data Transfer Source Serve ... 
- 数据库数据对比自动生成sql
		1.故事背景 有一次迭代步入尾声,提交给用户测试,系统管理员在测试环境中初始了一些数据,然后在上线的时候系统管理员再去正式环境初始这一些数据,然而这次数据太多了,说了一次:”为什么要初始化两次?“ 你 ... 
- 使用sqlmetal工具自动生成SQL数据库的Linq类文件
		第一部:找到sqlmetal.exe. 运行cmd. 执行命令 cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5 ... 
- Mybatis-Plus BaseMapper自动生成SQL及MapperProxy
		目录 Spring+Mybatis + Mybatis-Plus 自定义无XML的sql生成及MapperProxy代理生成 问题产生背景 框架是如何使用 无Xml的SQL是如何生成生成及SQL长成什 ... 
- Excel 提供数据 更新或者插入数据 通过函数 自动生成SQL语句
		excel 更新数据 ="UPDATE dbo.yt_vehicleExtensionBase SET yt_purchase_date='"&B2&"' ... 
- 打开powerDesigner时,创建table对应的自动生成sql语句没有注释
		在创建pdm时由于需要在name列填写的是以后要在表中创建的注释信息,comment中则写的说明信息字数比较多.默认情况下在生成建表sql时不能将name生成注释信息,进行如下设置可以讲name生成注 ... 
- 根据DELTA自动生成SQL语句
		上传客户端的CLIENTDATASET.delta到服务器的clientdataset.data,服务端解析clientdataset的数据生成相应的SQL语句. 相对于直接调用datasetprov ... 
随机推荐
- JQuery Mobile+cordova构建一个Android项目
			1.安装Android开发环境 Android开发环境的安装,现在主要是由于不能访问谷歌站点,在windows下在host文件中添加一个对应的74.125.195.190 dl-ssl.goo ... 
- Python中日志的格式化输出
			import logging logfile = 'e:\\a.txt' # logging.basicConfig(filename=logfile,level=logging.INFO) # lo ... 
- Sleep 比对  (Win32API 与 STL )
			OutputDebugStringA("begin 1========"); for (int i = 0; i < 1800; i++) { Sleep(2); } Out ... 
- C#Dos命令
			记下 打开IIs:按Win+R键,输入inetmgr ; 远程桌面:按Win+R键,输入mstsc; 启动服务:按Win+R键,输入inetmgr; 删除某服务:sc delete [ServerNa ... 
- 使用Spring的jdbcTemplate进一步简…
			先看applicationContext.xml配置文件: 版权声明:本文为博主原创文章,未经博主允许不得转载. 
- php+redis实现高并发模拟下单、秒杀、抢购操作
			对于高并发下的场景,一般都是采用redis缓存机制来处理. 当然也不是只有redis可以处理.还有利用mysql事务操作锁住操作的行.文件锁. 不过这些方式都没有redis缓存高效.可靠. 模拟的过程 ... 
- VMWare安装Ubuntu 16.04
			1.Ubuntu安装文件下载 到Ubuntu官网下载安装包,有Bit Torrent.Network installer多种方式下载. 推荐使用中国地区的镜像下载,我是用华科的校园网下载速度是非常感人 ... 
- SQL  分割字符串
			USE [AppCloud] GO /****** Object: UserDefinedFunction [dbo].[splitstr] Script Date: 12/19/2013 09:33 ... 
- Navicat导出数据库结构为PDF
			1.选中需要导出的数据表,右键选择 打印表 2.点击左上角 打印,选择标红的打印机,点击确定,然后键入文件名,确定之后会生成后缀为xps的文件 3.然后打开这个网址(https://xpstopdf. ... 
- 【工具篇】Sublime Text 2/3 安装汉化破解、插件包安装教程详解
			Sublime Text概述: Sublime Text是一个代码编辑器,也是HTML和散文先进的文本编辑器. 漂亮的用户界面和非凡的功能,例如:迷你地图,多选择,Python插件,代码段等等. 完全 ... 
