自动生成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 ...
随机推荐
- P1150 Peter的烟
题目描述 Peter有n根烟,他每吸完一根烟就把烟蒂保存起来,k(k>1)个烟蒂可以换一个新的烟,那么Peter最终能吸到多少根烟呢? 输入输出格式 输入格式: 每组测试数据一行包括两个整数n( ...
- poj3422K方格取数——最大费用最大流
题目:http://poj.org/problem?id=3422 最大费用最大流: 拆点,在自点之间连两条边,一条容量为1,边权为数字:一条容量为k-1,边权为0:表示可以走k次,只有一次能取到数字 ...
- POJ1144(割点入门题)
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11378 Accepted: 5285 Descript ...
- Nginx的一些优化(突破十万并发)
Nginx的一些优化(突破十万并发) nginx指令中的优化(配置文件) worker_processes 8; nginx进程数,建议按照cpu数目来指定,一般为它的倍数. worker_cpu_a ...
- SQL中的drop,truncate和delete的区别
(1) DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作.TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把 ...
- 3dmax导出缩放
参考 http://blog.dou.li/unity3d-import-3dmax-model-scale.html http://blog.csdn.net/pdw_jsp/article/det ...
- 洛谷P3200 [HNOI2009]有趣的数列(Catalan数)
P3200 [HNOI2009]有趣的数列 题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足 ...
- IT兄弟连 Java语法教程 Java平台的版本划分
自从Sun公司推出Java以来,就力图使之无所不能.Java发展至今,按应用范围划分为3个版本,即Java SE.Java EE和Java ME,也就是SunOne(Open Net Environm ...
- [NOI2002] 贪吃的九头蛇
考虑任意一种划给大头的方案,两端的都给了大头(bel=1)的边产生难受值,剩下n-k个果子分给m-1个头,当m-1=1时,两端都给了这个小头也产生难受值:而m-1>1的情况要好看的多,贪心的,因 ...
- 启动Eclipse时,出现 “Failed to load the JNI shared library "C:\Program Files\java\jdk1.7.....\jvm.dll"
原因1:给定目录下jvm.dll不存在. 解决方法:(1)重新安装jre或者jdk并配置好环境变量. (2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本 ...