using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.OracleClient;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
namespace EShang.Common
{
///
/// 数据表操作类
///
///
public class OperationDataHelper
{
#region 方法 -> 通用表数据操作
#region 通用表数据添加
///
/// 通用表数据添加
/// Mr.Cai 2018-1-2
///
/// 数据库SQL执行帮助类
/// 实体类
/// 表名
/// 主键名
/// 主键自增SQL函数
///
public static void InsertTableData(OracleHelper oracleHelper, T t, string tableName, string primaryKey, string nextval)
{
if (string.IsNullOrEmpty(tableName))
{
throw new Exception("表名不可为空!");
}
if (string.IsNullOrEmpty(primaryKey))
{
throw new Exception("表名主键名不可为空!");
}
if (string.IsNullOrEmpty(nextval))
{
throw new Exception("序列不可为空!");
}
try
{
var pros = typeof(T).GetProperties();
string names = string.Empty;
string values = string.Empty;
foreach (var item in pros)
{
//排除主键字段
if (item.Name.ToUpper() != primaryKey.ToUpper() &&
item.Name.ToUpper() != (primaryKey + "_Encrypt").ToUpper() &&
item.Name.ToUpper() != "KEYID")
{
object value = item.GetValue(t, null);
if (IsType(item.PropertyType, "System.String") ||
item.PropertyType == typeof(System.String))
{
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") + "'" + value + "'";
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System.Int16]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int32]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int64]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Double]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Decimal]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Boolean]") ||
item.PropertyType == typeof(System.Int16) ||
item.PropertyType == typeof(System.Int32) ||
item.PropertyType == typeof(System.Int64) ||
item.PropertyType == typeof(System.Double) ||
item.PropertyType == typeof(System.Decimal) ||
item.PropertyType == typeof(System.Boolean))
{
if (value != null)
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") + value;
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System.DateTime]") ||
item.PropertyType == typeof(System.DateTime))
{
if (value != null)
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") +
string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", value);
}
else
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") +
string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", DateTime.Now.ToString());
}
continue;
}
}
}
string _SqlString = string.Format("INSERT INTO {0}({1},{2}) VALUES({3},{4})", tableName, primaryKey, names, nextval, values);
oracleHelper.ExcuteSql(_SqlString);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region 通用表数据修改
///
/// 通用表数据修改
/// Mr.Cai 2018-3-15
///
/// 数据库SQL执行帮助类
/// 实体类集合
/// 表名
/// 条件名数组
/// 是否更新空值字段
public static void UpdateTableData(OracleHelper oracleHelper, List listData, string tableName, string[] whereName, bool updateNull = false)
{
if (listData == null)
{
throw new Exception("数据集合不可为空!");
}
if (whereName == null)
{
throw new Exception("修改条件名不可为空!");
}
if (string.IsNullOrEmpty(tableName))
{
throw new Exception("表名不可为空!");
}
try
{
string[] sqlString = new string[listData.Count];
int index = 0;//索引
foreach (T t in listData)
{
var pros = typeof(T).GetProperties();
string modifiedValues = string.Empty;
string whereModified = string.Empty;
foreach (var item in pros)
{
// isPrimaryKey = true 排除主键字段
if (item.Name.ToUpper().Contains(("_Encrypt").ToUpper()) || item.Name.ToUpper() == "KEYID")
{
continue;
}
object value = item.GetValue(t, null);
if (IsType(item.PropertyType, "System.String") ||
item.PropertyType == typeof(System.String))
{
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
modifiedValues += (string.IsNullOrEmpty(modifiedValues) ? "" : ",") + item.Name + " = " + "'" + value + "'";
for (int i = 0; i < whereName.Length; i++)
{
if (whereName[i].ToUpper().Equals(item.Name.ToUpper()))
{
whereModified += (string.IsNullOrEmpty(whereModified) ? "" : " AND ") +
item.Name + "=" + "'" + value + "'";
}
}
}
else
{
if (updateNull)
{
modifiedValues += (string.IsNullOrEmpty(modifiedValues) ? "" : ",") + item.Name + " = " + "NULL";
}
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System.Int16]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int32]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int64]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Double]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Decimal]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Boolean]") ||
item.PropertyType == typeof(System.Int16) ||
item.PropertyType == typeof(System.Int32) ||
item.PropertyType == typeof(System.Int64) ||
item.PropertyType == typeof(System.Double) ||
item.PropertyType == typeof(System.Decimal) ||
item.PropertyType == typeof(System.Boolean))
{
if (value != null)
{
modifiedValues += (string.IsNullOrEmpty(modifiedValues) ? "" : ",") + item.Name + " = " + value;
for (int i = 0; i < whereName.Length; i++)
{
if (whereName[i].ToUpper().Equals(item.Name.ToUpper()))
{
whereModified += (string.IsNullOrEmpty(whereModified) ? "" : " AND ") + item.Name + " = " + value;
}
}
}
else
{
modifiedValues += (string.IsNullOrEmpty(modifiedValues) ? "" : ",") + item.Name + " = " + "NULL";
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System.DateTime]") ||
item.PropertyType == typeof(System.DateTime))
{
if (value != null)
{
modifiedValues += (string.IsNullOrEmpty(modifiedValues) ? "" : ",") + item.Name + "=" +
string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", value);
for (int i = 0; i < whereName.Length; i++)
{
if (whereName[i].ToUpper().Equals(item.Name.ToUpper()))
{
whereModified += (string.IsNullOrEmpty(whereModified) ? "" : " AND ") + item.Name + "=" +
string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", value);
}
}
}
continue;
}
}
sqlString[index] += string.Format("UPDATE {0} SET {1} WHERE {2}", tableName, modifiedValues, whereModified);
index++;
}
oracleHelper.ExecuteSqlTran(sqlString);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region 通用表数据添加(集合)
///
/// 通用表数据添加(集合)
/// Mr.Cai 2018-3-9
///
/// 数据库SQL执行帮助类
/// 实体类集合
/// 表名
/// 是否使用自增主键(序列)
/// 主键名
/// 主键自增SQL函数
public static void InsertTableData(OracleHelper oracleHelper, List listData, string tableName,
bool isPrimaryKey = false, string primaryKey = "", string nextval = "")
{
if (listData == null)
{
throw new Exception("数据集合不可为空!");
}
if (string.IsNullOrEmpty(tableName))
{
throw new Exception("表名不可为空!");
}
if (isPrimaryKey)//不插入原来主键,使用自增主键(序列),则判断必要条件
{
if (string.IsNullOrEmpty(primaryKey))
{
throw new Exception("表名主键名不可为空!");
}
if (string.IsNullOrEmpty(nextval))
{
throw new Exception("序列不可为空!");
}
}
try
{
List sqlStringList = new List();
string sqlString = string.Empty;
foreach (T t in listData)
{
var pros = typeof(T).GetProperties();
string names = string.Empty;
string values = string.Empty;
foreach (var item in pros)
{
// isPrimaryKey = true 排除主键字段
if ((isPrimaryKey && item.Name.ToUpper() == primaryKey.ToUpper()) ||
item.Name.ToUpper().Contains((primaryKey + "_Encrypt").ToUpper()) ||
item.Name.ToUpper() == "KEYID")
{
continue;
}
object value = item.GetValue(t, null);
if (IsType(item.PropertyType, "System.String") ||
item.PropertyType == typeof(System.String))
{
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") + "'" + value.ToString().Replace("'", "''") + "'";
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System.Int16]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int32]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int64]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Double]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Decimal]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Boolean]") ||
item.PropertyType == typeof(System.Int16) ||
item.PropertyType == typeof(System.Int32) ||
item.PropertyType == typeof(System.Int64) ||
item.PropertyType == typeof(System.Double) ||
item.PropertyType == typeof(System.Decimal) ||
item.PropertyType == typeof(System.Boolean))
{
if (value != null)
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") + value;
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System.DateTime]") ||
item.PropertyType == typeof(System.DateTime))
{
if (value != null)
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") +
string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", value);
}
continue;
}
}
if (isPrimaryKey)
{
sqlStringList.Add(string.Format("INSERT INTO {0}({1},{2}) VALUES({3},{4})", tableName, primaryKey, names, nextval, values));
}
else
{
sqlStringList.Add(string.Format("INSERT INTO {0}({1}) VALUES({2})", tableName, names, values));
}
}
if (sqlStringList != null && sqlStringList.Count > 0)
{
oracleHelper.ExecuteSqlTran(sqlStringList);
}
else
{
throw new Exception("SQL语句不可为空!");
}
}
catch (Exception ex)
{
//LogHelper.WriteSendLog(ex.Message);
throw ex;
}
}
#endregion
#region 通用表数据添加(分表)
///
/// 通用表数据添加(分表)
///
/// 数据库SQL执行帮助类
/// 分表实体类集合
/// 主表名
/// 是否使用自增主键(序列)
/// 主键名
/// 主键自增SQL函数
public static void InsertSubTableData(OracleHelper oracleHelper, Dictionary> listData, string tableName,
bool isPrimaryKey = false, string primaryKey = "", string nextval = "")
{
if (listData == null)
{
throw new Exception("数据集合不可为空!");
}
if (string.IsNullOrEmpty(tableName))
{
throw new Exception("表名不可为空!");
}
if (isPrimaryKey)//不插入原来主键,使用自增主键(序列),则判断必要条件
{
if (string.IsNullOrEmpty(primaryKey))
{
throw new Exception("表名主键名不可为空!");
}
if (string.IsNullOrEmpty(nextval))
{
throw new Exception("序列不可为空!");
}
}
try
{
List sqlStringList = new List();
string sqlString = string.Empty;
foreach (var _Key in listData.Keys)
{
foreach (T t in listData[_Key])
{
var pros = typeof(T).GetProperties();
string names = string.Empty;
string values = string.Empty;
foreach (var item in pros)
{
// isPrimaryKey = true 排除主键字段
if ((isPrimaryKey && item.Name.ToUpper() == primaryKey.ToUpper()) ||
item.Name.ToUpper().Contains((primaryKey + "_Encrypt").ToUpper()) ||
item.Name.ToUpper() == "KEYID")
{
continue;
}
object value = item.GetValue(t, null);
if (IsType(item.PropertyType, "System.String") ||
item.PropertyType == typeof(System.String))
{
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") + "'" + value.ToString().Replace("'", "''") + "'";
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System.Int16]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int32]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int64]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Double]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Decimal]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Boolean]") ||
item.PropertyType == typeof(System.Int16) ||
item.PropertyType == typeof(System.Int32) ||
item.PropertyType == typeof(System.Int64) ||
item.PropertyType == typeof(System.Double) ||
item.PropertyType == typeof(System.Decimal) ||
item.PropertyType == typeof(System.Boolean))
{
if (value != null)
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") + value;
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System.DateTime]") ||
item.PropertyType == typeof(System.DateTime))
{
if (value != null)
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") +
string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", value);
}
continue;
}
}
if (isPrimaryKey)
{
sqlStringList.Add(string.Format("INSERT INTO {0}({1},{2}) VALUES({3},{4})", $"{tableName}_{_Key}", primaryKey, names, nextval, values));
}
else
{
sqlStringList.Add(string.Format("INSERT INTO {0}({1}) VALUES({2})", $"{tableName}_{_Key}", names, values));
}
}
}
if (sqlStringList != null && sqlStringList.Count > 0)
{
oracleHelper.ExecuteSqlTran(sqlStringList);
}
else
{
throw new Exception("SQL语句不可为空!");
}
}
catch (Exception ex)
{
//LogHelper.WriteSendLog(ex.Message);
throw ex;
}
}
#endregion
#region 通用表OracleParameter数据添加(集合)
///
/// 通用表OracleParameter数据添加(集合)
/// 注:该方式支持byte []类型数据添加,不支持Boolean、SEQ主键方式添加
/// Mr.Cai 2018-7-19
///
/// 数据库SQL执行帮助类
/// 实体类集合
/// 表名
public static void InsertTableData_OracleParameter(OracleHelper oracleHelper, List listData, string tableName)
{
if (listData == null)
{
throw new Exception("数据集合不可为空!");
}
if (string.IsNullOrEmpty(tableName))
{
throw new Exception("表名不可为空!");
}
try
{
//需传递插入参数的集合
List OracleSQLInfos = new List();
foreach (T t in listData)
{
//插入语句及所有字段集合
OracleHelper.OracleSQLInfo oracleSQLInfo = new OracleHelper.OracleSQLInfo();
//所有字段集合
List oracleParameters = new List();
string sqlString = "INSERT INTO " + tableName + " ({0}) VALUES ({1})";
var pros = typeof(T).GetProperties();
string names = string.Empty;
string values = string.Empty;
foreach (var item in pros)
{
object value = item.GetValue(t, null);
if (IsType(item.PropertyType, "System.String") ||
item.PropertyType == typeof(System.String))
{
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") + ":" + item.Name;
oracleParameters.Add(GetOracleParameter(OracleType.VarChar, item.Name, value.ToString().Replace("'", "''")));
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System.Int16]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int32]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int64]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Double]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Decimal]") ||
item.PropertyType == typeof(System.Int16) ||
item.PropertyType == typeof(System.Int32) ||
item.PropertyType == typeof(System.Int64) ||
item.PropertyType == typeof(System.Double) ||
item.PropertyType == typeof(System.Decimal))
{
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") + ":" + item.Name;
oracleParameters.Add(GetOracleParameter(OracleType.Number, item.Name, value));
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System.Boolean]") ||
item.PropertyType == typeof(System.Boolean))
{
throw new Exception("ORACLE数据 不支持 Boolean,请使用Number 类型!");
}
if (IsType(item.PropertyType, "System.Nullable`1[System.DateTime]") ||
item.PropertyType == typeof(System.DateTime))
{
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") + ":" + item.Name;
oracleParameters.Add(GetOracleParameter(OracleType.DateTime, item.Name, value));
}
continue;
}
if (IsType(item.PropertyType, "System.Nullable`1[System..Byte[]]") ||
item.PropertyType == typeof(System.Byte[]))
{
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
names += (string.IsNullOrEmpty(names) ? "" : ",") + item.Name;
values += (string.IsNullOrEmpty(values) ? "" : ",") + ":" + item.Name;
oracleParameters.Add(GetOracleParameter(OracleType.Blob, item.Name, value));
}
continue;
}
}
if (!string.IsNullOrEmpty(names) && !string.IsNullOrEmpty(values))
{
oracleSQLInfo.sqlString = string.Format(sqlString, names, values);
oracleSQLInfo.sqlStringArray = oracleParameters;
OracleSQLInfos.Add(oracleSQLInfo);
}
else
{
throw new Exception("不可存在所有值为空的SQL数据!");
}
}
if (OracleSQLInfos != null && OracleSQLInfos.Count > 0)
{
oracleHelper.ExecuteSqlTran(OracleSQLInfos);
}
else
{
throw new Exception("SQL语句集合不可为空!");
}
}
catch (Exception ex)
{
//LogHelper.WriteSendLog(ex.Message);
throw ex;
}
}
#endregion
#region 获取通用表数据查询条件
///
/// 获取通用表数据查询条件
///
/// 实体类
/// 查询方式:0【模糊查询】,1【精确查询】
/// 查询表定义名称,如A.
/// 排除查询的字段
///
public static string GetWhereSQL(T t, int? QueryType, string OtherName = "", params string[] ExcludeName)
{
string WhereSQL = "";
var pros = typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
foreach (var item in pros)
{
object value = item.GetValue(t, null);
//如果排除字段中包含当前参数,则执行下一个参数查询
if (ExcludeName != null && ExcludeName.Contains(item.Name))
{
continue;
}
//查询字符串类型参数
if (IsType(item.PropertyType, "System.String") || item.PropertyType == typeof(String))
{
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
if (QueryType == 2&& value.ToString().Split(',').Length>0)//选择父类IN查询
{
string[] strList = value.ToString().Split(',');
string newVaule = string.Empty;
for (int k = 0; k < strList.Length; k++)
{
newVaule += ",'" + strList[k].ToString()+"'";
}
if (newVaule.ToString().Length>0)
{
newVaule = newVaule.ToString().Substring(1);
}
WhereSQL += (string.IsNullOrEmpty(WhereSQL) ? "" : " AND ") + OtherName + item.Name +
(QueryType == 2 ? " in( " + newVaule.ToString() + ")" : " = '" + value + "'");
}
else
{
WhereSQL += (string.IsNullOrEmpty(WhereSQL) ? "" : " AND ") + OtherName + item.Name +
(QueryType == 0 ? " like '%" + value + "%'" : " = '" + value + "'");
}
}
continue;
}
//查询数字类型或bool型参数
if (IsType(item.PropertyType, "System.Nullable`1[System.Int16]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int32]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int64]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Double]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Decimal]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Boolean]") ||
item.PropertyType == typeof(Int16) || item.PropertyType == typeof(Int32) || item.PropertyType == typeof(Int64) ||
item.PropertyType == typeof(Double) || item.PropertyType == typeof(Decimal) || item.PropertyType == typeof(Boolean))
{
if (value != null)
{
WhereSQL += (string.IsNullOrEmpty(WhereSQL) ? "" : " AND ") + OtherName + item.Name + " = " + value;
}
continue;
}
//查询日期类型参数
if (IsType(item.PropertyType, "System.Nullable`1[System.DateTime]") ||
item.PropertyType == typeof(DateTime))
{
if (value != null)
{
WhereSQL += (string.IsNullOrEmpty(WhereSQL) ? "" : " AND ") + OtherName + item.Name + " = " +
string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", value);
}
continue;
}
}
return WhereSQL;
}
#endregion
#region 获取数据表执行语句(0:新增;1:修改)
///
/// 获取数据表执行语句
///
/// 泛型数据对象
///
/// 执行类型
/// 0:新增;1:修改
///
///
/// 数据库表名称
/// 主键值名称
/// 表序列名称
/// 日期类型的字段执行语句
/// 排除执行的字段
/// where查询语句
public static string GetTableExcuteSQL(T t, int ExcuteType, string tableName, string keyField,
string seqName, Dictionary dateFieldList, List excludeField, string WhereSQL = "")
{
string SQLString, InsertField = "", ExcuteSQL = "";
var pros = typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
foreach (var item in pros)
{
//排除掉用于查询的字段,这些字段不属于表的字段
if (excludeField.Contains(item.Name))
{
continue;
}
//存储插入表中的字段名称
InsertField += (InsertField == "" ? "" : ",") + item.Name;
//获取当前对象中字段的值
object value = item.GetValue(t, null);
//判断是不是主键值
if (item.Name == keyField)
{
//只有插入语句才会更新主键值
if (ExcuteType == 0)
{
if (value != null)
{
//主键值存在则以对象中的值为准
ExcuteSQL += (string.IsNullOrEmpty(ExcuteSQL) ? "" : ",\r\n") + value;
}
else
{
//否则执行表的序列,获取主键值
ExcuteSQL += (string.IsNullOrEmpty(ExcuteSQL) ? "" : ",\r\n") + seqName + ".NEXTVAL";
}
}
continue;
}
else if (dateFieldList.ContainsKey(item.Name))
{
//判断是不是日期字段,如果是就按照日期格式的字段去执行
ExcuteSQL += (string.IsNullOrEmpty(ExcuteSQL) ? "" : ",\r\n") +
(ExcuteType == 1 ? item.Name + " = " : "") + dateFieldList[item.Name];
continue;
}
//查询字符串类型参数
if (IsType(item.PropertyType, "System.String") || item.PropertyType == typeof(String))
{
ExcuteSQL += (string.IsNullOrEmpty(ExcuteSQL) ? "" : ",\r\n") +
(ExcuteType == 1 ? item.Name + " = " : "") +
(value == null ? "NULL" : "'" + value + "'");
continue;
}
//查询数字类型或bool型参数
if (IsType(item.PropertyType, "System.Nullable`1[System.Int16]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int32]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Int64]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Double]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Decimal]") ||
IsType(item.PropertyType, "System.Nullable`1[System.Boolean]") ||
item.PropertyType == typeof(Int16) || item.PropertyType == typeof(Int32) || item.PropertyType == typeof(Int64) ||
item.PropertyType == typeof(Double) || item.PropertyType == typeof(Decimal) || item.PropertyType == typeof(Boolean))
{
ExcuteSQL += (string.IsNullOrEmpty(ExcuteSQL) ? "" : ",\r\n") +
(ExcuteType == 1 ? item.Name + " = " : "") +
(value == null ? "NULL" : value.ToString());
continue;
}
//查询日期类型参数
if (IsType(item.PropertyType, "System.Nullable`1[System.DateTime]") ||
item.PropertyType == typeof(DateTime))
{
ExcuteSQL += (string.IsNullOrEmpty(ExcuteSQL) ? "" : ",\r\n") +
(ExcuteType == 1 ? item.Name + " = " : "") +
(value == null ? "NULL" : string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", value));
continue;
}
}
switch (ExcuteType)
{
case 0://执行插入语句
SQLString = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", tableName, InsertField, ExcuteSQL);
break;
case 1://执行更新语句
SQLString = string.Format("UPDATE {0} SET {1}{2}", tableName, ExcuteSQL, WhereSQL);
break;
default:
SQLString = "";
break;
}
return SQLString;
}
#endregion
#endregion
#region 方法 -> 类型匹配
///
/// 类型匹配
///
/// 类型
/// 类型名称
///
public static bool IsType(Type type, string typeName)
{
if (type.ToString() == typeName)
return true;
if (type.ToString() == "System.Object")
return false;
return IsType(type.BaseType, typeName);
}
#endregion
#region 方法 -> OracleParameter 值匹配
///
/// Oracle数据库参数值匹配
///
/// 指定的字段或属性中使用的数据类型
/// 字段名称
/// 字段值
///
public static OracleParameter GetOracleParameter(OracleType type, string name, object value)
{
OracleParameter oracleParameter = new OracleParameter(name, type);
oracleParameter.Value = value;
return oracleParameter;
}
#endregion
///
/// 按照某个字段排序
///
/// 数据集合
/// 需要排序的字段
/// 倒序还是顺序
///
public static List OrderByField(List list, string sortfield, bool IsDesc)
{
var Queryable = list.AsQueryable();
var p = Expression.Parameter(typeof(T), "p");
var x = Expression.Lambda(Expression.Property(p, sortfield), p);
return Queryable.Provider.CreateQuery(
Expression.Call(typeof(Queryable),
IsDesc ? "OrderByDescending" : "OrderBy",
new Type[] { Queryable.ElementType, x.Body.Type },
Queryable.Expression,
x)).ToList();
}
}
}