using MOKA_Factory_Tools.Database;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Dynamic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace MOKA_Factory_Tools.DAL
{
public abstract class BaseDAL
{
#region 属性
///
/// 数据表模型对象
///
public abstract object ObjModel { get; }
///
/// 数据表名
///
public abstract string TableName { get; set; }
///
/// 过期属性请不要使用 数据表字段名字符串,字段名以“,”号分隔
///
public abstract string TableFieldNameString { get; set; }
string _TableFieldNameStr = "";
///
/// 数据表字段名字符串,字段名以“,”号分隔
///
public string TableFieldNameStr
{
get
{
if (this._TableFieldNameStr.Trim() == "")
{
for (int i = 0; i < this.TableFieldNames.Length; i++)
{
if (this._TableFieldNameStr.Trim() == "")
{
this._TableFieldNameStr += "[" + this.TableFieldNames[i] + "]";
}
else
{
this._TableFieldNameStr += ",[" + this.TableFieldNames[i] + "]";
}
}
}
if (this._TableFieldNameStr.Trim() == "")
{
this._TableFieldNameStr = "*";
}
return this._TableFieldNameStr;
}
set { this._TableFieldNameStr = value; }
}
///
/// 数据表字段名数组
///
public string[] TableFieldNames
{
get
{
System.Reflection.PropertyInfo[] propertyInfos = this.PropertyInfos;
string[] fieldNames = new string[propertyInfos.Length];
for (int i = 0; i < propertyInfos.Length; i++)
{
if (!propertyInfos[i].IsSpecialName)
{
System.Reflection.PropertyInfo propertyInfo = propertyInfos[i];
fieldNames[i] = propertyInfo.Name;
}
}
// System.Reflection.PropertyInfo propertyInfo = ObjModel.GetType().GetProperty(propertyInfos[0].Name);
return fieldNames;//this.TableFieldNameString.Replace("[", "").Replace("]", "").Replace(" ", "").Split(',');
}
}
public ConnectionParameters cps = new ConnectionParameters();
///
/// 获取要查询的当前表的字段集合字符串 用","号分隔
///
///
/// 如果为true 表示只返回 filters 集合中的字段 如果为false 表示返回排除 filters 集合中的字段以外的所有字段
///
public string GetQueryTableFieldNames(string[] filters = null, bool isContain = false)
{
List tempFilters = new List();
if (filters != null)
{
tempFilters.AddRange(filters);
}
System.Reflection.PropertyInfo[] propertyInfos = this.PropertyInfos;
string fieldNames = "";
for (int i = 0; i < propertyInfos.Length; i++)
{
if (!propertyInfos[i].IsSpecialName)
{
System.Reflection.PropertyInfo propertyInfo = propertyInfos[i];
if ((!tempFilters.Contains(propertyInfo.Name) && !isContain) || (tempFilters.Contains(propertyInfo.Name) && isContain))
{
if (fieldNames.Trim().Length <= 0)
{
fieldNames = "[" + propertyInfo.Name + "]";
}
else
{
fieldNames += ",[" + propertyInfo.Name + "]";
}
}
}
}
return fieldNames;
}
///
/// 获取属性集合
///
public System.Reflection.PropertyInfo[] PropertyInfos
{
get
{
List list = new List();
System.Reflection.PropertyInfo[] infos = ObjModel.GetType().GetProperties();
foreach (System.Reflection.PropertyInfo info in infos)
{
if (info.CanWrite)
{
list.Add(info);
}
}
return list.ToArray();
}
}
#endregion
#region 检查记录
///
/// 是否存在该记录
///
public bool Exists(long id)
{
return this.Exists("ID", id);
}
///
/// 是否存在该记录
///
public bool Exists(int id)
{
return this.Exists("ID", id);
}
///
/// 根据筛选条件判断是否存在该记录
///
/// 筛选字段名
/// 筛选值
///
public bool Exists(string filterFieldName, object filterValue)
{
if (filterFieldName != "" && filterValue != null)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select count(1) from " + this.TableName + " ");
strSql.Append(" where 1=1 and " + filterFieldName + "=@" + filterFieldName);
SqlParameter[] parameters = { new SqlParameter("@" + filterFieldName, filterValue) };
return DbHelper.Exists(cps.ConnectionString, strSql.ToString(), parameters);
}
else
{
return false;
}
}
///
/// 根据筛选条件判断是否存在该记录
///
/// 筛选字段名
/// 筛选值
///
public bool Exists(string whereString)
{
if (whereString.Trim().Length > 0)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select count(1) from " + this.TableName + " ");
strSql.Append(" where " + whereString);
return DbHelper.Exists(cps.ConnectionString, strSql.ToString());
}
else
{
return false;
}
}
///
/// 判断是否存某个字段
///
/// 列名称
/// 是否存在
public bool ColumnExists(string columnName)
{
return DbHelper.IsColumnExists(cps.ConnectionString, this.TableName, columnName);
}
#endregion
#region 公共方法
///
/// 获取最大ID()
///
///
public int GetMaxID()
{
return this.GetMaxID("ID");
}
///
/// 获取某字段最大值(获取字段必须为数字类型)
///
///
///
///
public int GetMaxID(string FieldName, string strWhere = "")
{
return DbHelper.GetMaxID(cps.ConnectionString, FieldName, this.TableName, strWhere);
}
///
/// 检查CLR功能是否开启
///
///
public bool CheckingCLR()
{
try
{
DataSet cds = DbHelper.Query(cps.ConnectionString, "select top 1 CONVERT(nvarchar(200), dbo.FunTrim(dbo.AggregateString(GM_CustomerID + '{$$}/{where}' +[GM_CustomerID] + '{$$}={$$}' + GM_RelatedPersonID + '{$$}s') + '/' + dbo.AggregateString(GM_CustomerID + '{$$}/{where}' +[GM_CustomerID] + '{$$}<>{$$}' + GM_RelatedPersonID + '{$$}s'), '/')) as CustomerID from[dbo].[tb_ErpCustomerGroupMembers] group by GM_CustomerGroupID");
return true;
}
catch
{
return false;
}
}
public void ExecuteSql(string sql)
{
DbHelper.ExecuteSQL(cps.ConnectionString, sql);
}
#endregion
#region 判断方法
///
/// 获取是否为忽略字段 返回 true 表示忽略 false 不忽略
///
/// 忽略字段名列表 字段名之间用“,”号分隔
/// 要判断的字段名
///
public bool IsOverlookFiel(string overlookFieldList, string fieldName)
{
bool bl = false;
string[] tempOverlookFieldList = overlookFieldList.Split(',');
for (int i = 0; i < tempOverlookFieldList.Length; i++)
{
if (tempOverlookFieldList[i].Trim().ToLower() == fieldName.Trim().ToLower())
{
bl = true;
break;
}
}
return bl;
}
#endregion
#region 增加数据
///
/// 增加一条数据
///
/// Model对象
/// 忽略字段名列表 字段名之间用“,”号分隔
///
public bool Add(object model, string overlookFieldList = "ID")
{
CommandInfo comdInfo = this.GetAddCommandInfo(model, overlookFieldList);
int rows = DbHelper.ExecuteSQL(cps.ConnectionString, comdInfo.CommandText, (SqlParameter[])comdInfo.Parameters);
if (rows > 0)
{
return true;
}
else
{
return false;
}
}
///
/// 获取插入数CommandInfo对象
///
///
/// 要忽略的字段集合 多个字段名有“,”号分隔
///
public object GetAddCommandInfoObject(object model, string overlookFieldList = "ID")
{
return this.GetAddCommandInfo(model, overlookFieldList);
}
///
/// 获取插入数CommandInfo对象
///
///
/// 要忽略的字段集合 多个字段名有“,”号分隔
///
///
public CommandInfo GetAddCommandInfo(object model, string overlookFieldList = "ID", EffentNextType type = EffentNextType.None)
{
StringBuilder strSql = new StringBuilder();
StringBuilder tempFieldNameString = new StringBuilder();
StringBuilder tempValueVariable = new StringBuilder();
List parameterlist = new List();
for (int i = 0; i < PropertyInfos.Length; i++)
{
try
{
System.Reflection.PropertyInfo propertyInfo = PropertyInfos[i];
string tempFieldName = propertyInfo.Name;
object tempValue = propertyInfo.GetValue(model, null);
Type tempType = propertyInfo.PropertyType;
if (!IsOverlookFiel(overlookFieldList, tempFieldName) || (tempFieldName.ToLower() == "id" && tempType == typeof(long)))
{
try
{
if (tempType.Name == "DateTime")
{
if (tempValue.ToString().Contains("0001"))
{
tempValue = null;
}
try
{
DateTime tempTime;
if (!DateTime.TryParse(tempValue.ToString(), out tempTime))
{
tempValue = null;
}
else if (tempTime <= Convert.ToDateTime("1900-01-01"))
{
tempValue = null;
}
}
catch
{
tempValue = null;
}
}
else if (tempFieldName.ToLower() == "id" && tempType == typeof(long) && (tempValue == null || Convert.ToInt64(tempValue) == 0))
{
byte[] buffer = Guid.NewGuid().ToByteArray();
tempValue = BitConverter.ToInt64(buffer, 0);
}
if (tempValue != null)
{
tempFieldNameString.Append("" + tempFieldName + ",");
tempValueVariable.Append("@" + tempFieldName + ",");
SqlParameter parameter = new SqlParameter("@" + tempFieldName, tempValue);
string classFullName = tempType.ToString();
if (classFullName.ToLower().IndexOf("system.") != 0)
{
parameter.DbType = DbType.String;
parameter = new SqlParameter("@" + tempFieldName, tempValue.ToString());
}
parameterlist.Add(parameter);
}
}
catch { }
}
}
catch { }
}
//去除结尾多余的“,”
if (tempFieldNameString.ToString().LastIndexOf(',') == tempFieldNameString.Length - 1)
{
tempFieldNameString.Remove(tempFieldNameString.Length - 1, 1);
}
//去除结尾多余的“,”
if (tempValueVariable.ToString().LastIndexOf(',') == tempValueVariable.Length - 1)
{
tempValueVariable.Remove(tempValueVariable.Length - 1, 1);
}
strSql.Append("insert into " + this.TableName + "(");
strSql.Append("" + tempFieldNameString.ToString() + ")");
strSql.Append(" values (");
strSql.Append("" + tempValueVariable.ToString() + ")");
strSql.Append(";select @@IDENTITY");
SqlParameter[] parameters = parameterlist.ToArray();
return new CommandInfo(strSql.ToString(), parameters, type);
}
#endregion
#region 更新数据
///
/// 根据筛选字段和SQL筛选运算符号更新数据(内部方法)
///
/// Model对象
/// 筛选字段名称
/// SQL筛选运算符号
/// 忽略字段名列表 字段名之间用“,”号分隔
/// Wher条件,当指定条件语句时筛选字段设置无效,不包含“where”关键字 不建义使用此参数
///
protected bool InsideUpdate(object model, string filterFieldName = "ID", string operators = "=", string overlookFieldList = "ID", string whereStr = null)
{
CommandInfo comdInfo = GetUpdateCommandInfo(model, filterFieldName, operators, overlookFieldList, whereStr);
int rows = DbHelper.ExecuteSQL(cps.ConnectionString, comdInfo.CommandText, (SqlParameter[])comdInfo.Parameters);
if (rows > 0)
{
return true;
}
else
{
return false;
}
}
///
/// 获取更新数据的UpdateCommandInfo对象 根据筛选字段和SQL筛选运算符号更新数据(内部方法)
///
/// Model对象
/// 筛选字段名称
/// SQL筛选运算符号
/// 忽略字段名列表 字段名之间用“,”号分隔
/// Wher条件,当指定条件语句时筛选字段设置无效,不包含“where”关键字 不建义使用此参数
public object GetUpdateCommandInfoObject(object model, string filterFieldName = "ID", string operators = "=", string overlookFieldList = "ID", string whereStr = null)
{
return this.GetUpdateCommandInfo(model, filterFieldName, operators, overlookFieldList, whereStr);
}
///
/// 获取更新数据的UpdateCommandInfo对象 根据筛选字段和SQL筛选运算符号更新数据(内部方法)
///
/// Model对象
/// 筛选字段名称
/// SQL筛选运算符号
/// 忽略字段名列表 字段名之间用“,”号分隔
/// Wher条件,当指定条件语句时筛选字段设置无效,不包含“where”关键字 不建义使用此参数
///
public CommandInfo GetUpdateCommandInfo(object model, string filterFieldName = "ID", string operators = "=", string overlookFieldList = "ID", string whereStr = null, EffentNextType type = EffentNextType.None)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("update " + this.TableName + " set ");
List parameterlist = new List();
overlookFieldList += "," + filterFieldName;
object VerifyTimestamp = null;
for (int i = 0; i < PropertyInfos.Length; i++)
{
try
{
System.Reflection.PropertyInfo propertyInfo = PropertyInfos[i];
string tempFieldName = propertyInfo.Name;//字段名
object tempValue = propertyInfo.GetValue(model, null);//对应字段值
//如果字段名不为忽略字段则进行处理
if (!IsOverlookFiel(overlookFieldList, tempFieldName))
{
try
{
if (tempValue.GetType() == typeof(DateTime))
{
DateTime tempTime;
try
{
if (!DateTime.TryParse(tempValue.ToString(), out tempTime))
{
tempValue = null;
}
else if (tempTime <= Convert.ToDateTime("1900-01-01"))
{
tempValue = null;
}
else if (tempTime.Year == Convert.ToDateTime("0001-01-01").Year || tempTime.Year == Convert.ToDateTime("1753-01-01").Year)
{
tempValue = null;
}
}
catch { tempValue = null; }
}
else if (tempValue.GetType() == typeof(byte[]))
{
if (tempFieldName.ToLower() == "VerifyTimestamp".ToLower())
{
VerifyTimestamp = tempValue;
continue;
}
}
}
catch { }
strSql.Append("" + tempFieldName + "=@" + tempFieldName + ",");
SqlParameter parameter = new SqlParameter("@" + tempFieldName, tempValue);
string classFullName = propertyInfo.PropertyType.ToString();
if (classFullName.ToLower().IndexOf("system.") != 0)
{
parameter.DbType = DbType.String;
parameter = new SqlParameter("@" + tempFieldName, tempValue.ToString());
}
parameterlist.Add(parameter);
}
}
catch { }
}
//去除结尾多余的“,”
if (strSql.ToString().LastIndexOf(',') == strSql.Length - 1)
{
strSql.Remove(strSql.Length - 1, 1);
}
if (whereStr == null)
{
if (filterFieldName != "" && operators != "")
{
try
{
object FilterFieldValue = DbHelper.GetPropertyValue(model, filterFieldName);// model.GetType().GetProperty(filterFieldName).GetValue(model, null);
if (VerifyTimestamp != null)
{
strSql.Append(" where " + filterFieldName + operators + "@" + filterFieldName + " and VerifyTimestamp=@VerifyTimestamp");
parameterlist.Add(new SqlParameter("@VerifyTimestamp", VerifyTimestamp));
}
else
{
strSql.Append(" where " + filterFieldName + operators + "@" + filterFieldName);
}
parameterlist.Add(new SqlParameter("@" + filterFieldName, FilterFieldValue));
}
catch
{
}
}
}
else
{
if (VerifyTimestamp != null)
{
strSql.Append(" where " + filterFieldName + operators + "@" + filterFieldName + " and VerifyTimestamp=@VerifyTimestamp");
parameterlist.Add(new SqlParameter("@VerifyTimestamp", VerifyTimestamp));
}
else
{
strSql.Append(" where 1=1 and (" + whereStr + ")");
}
}
SqlParameter[] parameters = parameterlist.ToArray();
return new CommandInfo(strSql.ToString(), parameters, type);
}
///
/// 根据筛选字段和SQL筛选运算符号更新数据
///
/// Model对象
/// 筛选字段名称
/// SQL筛选运算符号
/// 忽略字段名列表 字段名之间用“,”号分隔
///
public bool Update(object model, string filterFieldName = "ID", string operators = "=", string overlookFieldList = "ID")
{
return InsideUpdate(model, filterFieldName, operators, overlookFieldList);
}
///
/// 根据Wher条件更新数据 不建义使用此方法
///
/// Model对象
/// Wher条件,不包含“where”关键字
/// 忽略字段名列表 字段名之间用“,”号分隔
///
public bool Update(object model, string whereStr, string overlookFieldList = "ID")
{
return InsideUpdate(model, overlookFieldList: overlookFieldList, whereStr: whereStr);
}
///
///
///
///
///
///
/// 因为AMResult表没有代理主键ID,所以需要独立方法更新;
public bool UpdateAMResult(object model, string strWhere, string IgnoreUpdateFields = "Station,SN,ODF,DSN,Line,Model,Dimension")
{
CommandInfo comdInfo = GetUpdateAMResultCommandInfo(model, IgnoreUpdateFields, strWhere);
int rows = DbHelper.ExecuteSQL(cps.ConnectionString, comdInfo.CommandText, (SqlParameter[])comdInfo.Parameters);
if (rows > 0)
{
return true;
}
else
{
return false;
}
}
///
///
/// 问题:Where条件后面跟的值是旧值,model的新值;
///
///
///
///
///
///
public CommandInfo GetUpdateAMResultCommandInfo(object model, string IgnoreUpdateFields = "Station,SN,ODF,DSN,Line,Model,Dimension", string whereStr = null, EffentNextType type = EffentNextType.None)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("update " + this.TableName + " set ");
List parameterlist = new List();
IgnoreUpdateFields += ",";
object VerifyTimestamp = null;
for (int i = 0; i < PropertyInfos.Length; i++)
{
try
{
System.Reflection.PropertyInfo propertyInfo = PropertyInfos[i];
string tempFieldName = propertyInfo.Name;//字段名
object tempValue = propertyInfo.GetValue(model, null);//对应字段值
//如果字段名不为忽略字段则进行处理
if (!IsOverlookFiel(IgnoreUpdateFields, tempFieldName))
{
try
{
if (tempValue.GetType() == typeof(DateTime))
{
DateTime tempTime;
try
{
if (!DateTime.TryParse(tempValue.ToString(), out tempTime))
{
tempValue = null;
}
else if (tempTime <= Convert.ToDateTime("1900-01-01"))
{
tempValue = null;
}
else if (tempTime.Year == Convert.ToDateTime("0001-01-01").Year || tempTime.Year == Convert.ToDateTime("1753-01-01").Year)
{
tempValue = null;
}
}
catch { tempValue = null; }
}
else if (tempValue.GetType() == typeof(byte[]))
{
if (tempFieldName.ToLower() == "VerifyTimestamp".ToLower())
{
VerifyTimestamp = tempValue;
continue;
}
}
}
catch { }
strSql.Append("" + tempFieldName + "=@" + tempFieldName + ",");
SqlParameter parameter = new SqlParameter("@" + tempFieldName, tempValue);
string classFullName = propertyInfo.PropertyType.ToString();
if (classFullName.ToLower().IndexOf("system.") != 0)
{
parameter.DbType = DbType.String;
parameter = new SqlParameter("@" + tempFieldName, tempValue.ToString());
}
parameterlist.Add(parameter);
}
}
catch { }
}
//去除结尾多余的“,”
if (strSql.ToString().LastIndexOf(',') == strSql.Length - 1)
{
strSql.Remove(strSql.Length - 1, 1);
}
if (whereStr != null)
{
strSql.Append(" where 1=1 and (" + whereStr + ")");
}
SqlParameter[] parameters = parameterlist.ToArray();
return new CommandInfo(strSql.ToString(), parameters, type);
}
#endregion
#region 删除数据
///
/// 根据筛选字段或where条件删除数据
///
/// 筛选字段名
/// 筛选SQL运算符
/// 筛选值
/// Wher条件,不包含“where”关键字
///
protected bool InsideDelete(string filterFieldName = "ID", string operators = "=", object filterValue = null, string whereStr = null)
{
CommandInfo comdInfo = GetDeleteCommandInfo(filterFieldName, operators, filterValue, whereStr);
int rows = DbHelper.ExecuteSQL(cps.ConnectionString, comdInfo.CommandText, (SqlParameter[])comdInfo.Parameters);
if (rows > 0)
{
return true;
}
else
{
return false;
}
}
///
/// 根据筛选字段或where条件删除数据
///
/// 筛选字段名
/// 筛选SQL运算符
/// 筛选值
/// Wher条件,传入条件语句时筛选字段无效不建义使用 不包含“where”关键字
///
public object GetDeleteCommandInfoObject(string filterFieldName = "ID", string operators = "=", object filterValue = null, string whereStr = null)
{
return this.GetDeleteCommandInfo(filterFieldName, operators, filterValue, whereStr);
}
///
/// 根据筛选字段或where条件删除数据
///
/// 筛选字段名
/// 筛选SQL运算符
/// 筛选值
/// Wher条件,传入条件语句时筛选字段无效不建义使用 不包含“where”关键字
///
///
public CommandInfo GetDeleteCommandInfo(string filterFieldName = "ID", string operators = "=", object filterValue = null, string whereStr = null, EffentNextType type = EffentNextType.None)
{
if (filterValue == null) { filterValue = ""; }
List parameterlist = new List();
StringBuilder strSql = new StringBuilder();
strSql.Append("delete from " + this.TableName + " ");
if (whereStr == null)
{
strSql.Append(" where " + filterFieldName + "" + operators + "@" + filterFieldName + "");
parameterlist.Add(new SqlParameter("@" + filterFieldName, filterValue));
}
else
{
strSql.Append(" where ID>@ID and (" + whereStr + ")");
parameterlist.Add(new SqlParameter("@ID", Convert.ToInt32(0)));
}
SqlParameter[] parameters = parameterlist.ToArray();
return new CommandInfo(strSql.ToString(), parameters, type);
}
///
/// 删除一条数据
///
/// id
public bool Delete(long ID)
{
return this.InsideDelete(filterValue: ID);
}
///
/// 删除一条数据
///
/// id
public bool Delete(int ID)
{
return this.InsideDelete(filterValue: ID);
}
///
/// 根据筛选字段删除数据
///
/// 筛选值
/// 筛选字段名
/// 筛选SQL运算符
///
public bool Delete(object filterValue, string filterFieldName = "ID", string operators = "=")
{
return this.InsideDelete(filterFieldName, operators, filterValue);
}
///
/// 根据where条件删除数据 不建义使用此方法
///
/// Wher条件,不包含“where”关键字
///
public bool Delete(string whereStr)
{
return this.InsideDelete(whereStr: whereStr);
}
///
/// 批量删除数据
///
/// 筛选字段名
/// 值列表,多个值用“,”分隔,字符串值用“'”号包含
public bool DeleteList(string filterFieldName, string valueList)
{
if (filterFieldName != "" && valueList != "")
{
StringBuilder strSql = new StringBuilder();
strSql.Append("delete from " + this.TableName + " ");
strSql.Append(" where " + filterFieldName + " in (" + valueList + ") ");
int rows = DbHelper.ExecuteSQL(cps.ConnectionString, strSql.ToString());
if (rows > 0)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
///
/// 按ID列表批量删除数据
///
/// ID列表,多个用“,”分隔
public bool DeleteList(string idList)
{
return this.DeleteList("ID", idList);
}
#endregion
#region 查询数据
public T GetDataRowToModelByEntity(DataRow row)
{
if (row == null)
{
return Activator.CreateInstance();
}
Dictionary dataInfo = new Dictionary();
dynamic objmatch = new ExpandoObject();
for (int i = 0; i < row.Table.Columns.Count; i++)
{
string value = "";
if (row[row.Table.Columns[i].ColumnName] != null)
{
value = row[row.Table.Columns[i].ColumnName].ToString();
}
if (!string.IsNullOrEmpty(value))
{
if (row.Table.Columns[i].DataType.Name.ToLower().IndexOf("DateTime".ToLower()) != -1)
{
dataInfo.Add(row.Table.Columns[i].ColumnName, Convert.ToDateTime(value).ToString("yyyy-MM-dd HH:mm:ss"));
}
else
{
dataInfo.Add(row.Table.Columns[i].ColumnName, value);
}
}
else
{
if (row.Table.Columns[i].DataType.Name.ToLower().IndexOf("String".ToLower()) != -1)
{
dataInfo.Add(row.Table.Columns[i].ColumnName, value);
}
}
}
objmatch = dataInfo;
string json = JsonConvert.SerializeObject((object)objmatch);
return JsonToModelByEntity(json);
}
T JsonToModelByEntity(string json)
{
T t = Activator.CreateInstance();
return (T)JsonConvert.DeserializeObject(json, t.GetType());
}
public DataSet GetViewDataSetByCustomer(string strSQL)
{
return DbHelper.Query(cps.ConnectionString, strSQL);
}
public object DataRowToModel(DataRow dr)
{
if (dr == null)
{
return Activator.CreateInstance();
}
Dictionary dataInfo = new Dictionary();
dynamic objmatch = new ExpandoObject();
for (int i = 0; i < dr.Table.Columns.Count; i++)
{
string value = dr[dr.Table.Columns[i].ColumnName].ToString();
if (!string.IsNullOrEmpty(value))
{
if (dr.Table.Columns[i].DataType.Name.IndexOf("DateTime") != -1)
{
dataInfo.Add(dr.Table.Columns[i].ColumnName, Convert.ToDateTime(value).ToString("yyyy-MM-dd HH:mm:ss"));
}
else
{
dataInfo.Add(dr.Table.Columns[i].ColumnName, value);
}
}
else
{
if (dr.Table.Columns[i].DataType.Name.ToLower().IndexOf("String".ToLower()) != -1)
{
dataInfo.Add(dr.Table.Columns[i].ColumnName, "");
}
}
}
objmatch = dataInfo;
string json = JsonConvert.SerializeObject((object)objmatch);
return DataRowToModelByEntity(json);
}
public object GetModelObjectByEntity(string filterFieldName, object filterValue)
{
DataRow dr = GetDataRow(filterFieldName, filterValue);
Dictionary dataInfo = new Dictionary();
if (dr == null)
{
return Activator.CreateInstance();
}
dynamic objmatch = new ExpandoObject();
for (int i = 0; i < dr.Table.Columns.Count; i++)
{
string value = dr[dr.Table.Columns[i].ColumnName].ToString();
if (!string.IsNullOrEmpty(value))
{
if (dr.Table.Columns[i].DataType.Name.IndexOf("DateTime") != -1)
{
dataInfo.Add(dr.Table.Columns[i].ColumnName, Convert.ToDateTime(value).ToString("yyyy-MM-dd HH:mm:ss"));
}
else
{
dataInfo.Add(dr.Table.Columns[i].ColumnName, value);
}
}
else
{
if (dr.Table.Columns[i].DataType.Name.ToLower().IndexOf("String".ToLower()) != -1)
{
dataInfo.Add(dr.Table.Columns[i].ColumnName, value);
}
}
}
objmatch = dataInfo;
string json = JsonConvert.SerializeObject((object)objmatch);
return DataRowToModelByEntity(json);
}
public object DataRowToModelByEntity(int ID)
{
DataRow dr = GetDataRow(ID);
if (dr == null)
{
return Activator.CreateInstance();
}
Dictionary dataInfo = new Dictionary();
dynamic objmatch = new ExpandoObject();
for (int i = 0; i < dr.Table.Columns.Count; i++)
{
string value = dr[dr.Table.Columns[i].ColumnName].ToString();
if (!string.IsNullOrEmpty(value))
{
if (dr.Table.Columns[i].DataType.Name.IndexOf("DateTime") != -1)
{
dataInfo.Add(dr.Table.Columns[i].ColumnName, Convert.ToDateTime(value).ToString("yyyy-MM-dd HH:mm:ss"));
}
else
{
dataInfo.Add(dr.Table.Columns[i].ColumnName, value);
}
}
else
{
if (dr.Table.Columns[i].DataType.Name.ToLower().IndexOf("String".ToLower()) != -1)
{
dataInfo.Add(dr.Table.Columns[i].ColumnName, value);
}
}
}
objmatch = dataInfo;
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
string json = JsonConvert.SerializeObject((object)objmatch, Formatting.Indented, timeFormat);
return DataRowToModelByEntity(json);
}
object DataRowToModelByEntity(string json)
{
T t = Activator.CreateInstance();
object obj = JsonConvert.DeserializeObject(json, t.GetType());//CustomPublicMethod.JsonToObject(json, t);
return obj;
}
///
/// 得到一个Object对象实体
///
///
///
public object GetModelObject(long ID)
{
return DataRowToModelObject(GetDataRow(ID));
}
///
/// 得到一个Object对象实体
///
///
///
public object GetModelObject(int ID)
{
return DataRowToModelObject(GetDataRow(ID));
}
///
/// 根据筛选条件获取一条数据Model对象
///
/// 筛选条件字段名
/// 值
///
public object GetModelObject(string filterFieldName, object filterValue)
{
return DataRowToModelObject(GetDataRow(filterFieldName, filterValue));
}
///
/// 根据筛选条件获取一条数据Model对象
///
/// 筛选条件字段名
/// 值
/// SQL筛选运算符号
///
public object GetModelObject(string filterFieldName, object filterValue, string operators)
{
return DataRowToModelObject(GetDataRow(filterFieldName, filterValue, operators));
}
///
/// 根据筛选条件获取一条数据Model对象
///
/// 筛选条件
///
public object GetModelObject(string whereString)
{
return DataRowToModelObject(GetDataRow(whereString));
}
///
/// 得到一个object对象实体
///
///
///
public object DataRowToModelObject(DataRow row)
{
return DataRowToModel(row, this.ObjModel);
}
///
/// 获取一条数据DataRow对象
///
/// id
///
public DataRow GetDataRow(long id)
{
return GetDataRow("ID", id);
}
///
/// 获取一条数据DataRow对象
///
/// id
///
public DataRow GetDataRow(int id)
{
return GetDataRow("ID", id);
}
///
/// 根据筛选条件获取一条数据DataRow对象
///
/// 筛选条件
///
public DataRow GetDataRow(string whereString)
{
if (whereString.Trim().Length > 0)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select top 1 " + this.TableFieldNameStr + " from " + this.TableName + " ");
strSql.Append(" where " + whereString);
DataSet ds = DbHelper.Query(cps.ConnectionString, strSql.ToString());
if (ds.Tables[0].Rows.Count > 0)
{
return ds.Tables[0].Rows[0];
}
else
{
return null;
}
}
else
{
return null;
}
}
///
/// 根据筛选条件获取一条数据DataRow对象
///
/// 筛选条件字段名
/// 值
/// SQL筛选运算符号
///
public DataRow GetDataRow(string filterFieldName, object filterValue, string operators = "=")
{
if (filterFieldName != "" && filterValue != null)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select top 1 " + this.TableFieldNameStr + " from " + this.TableName + " ");
strSql.Append(" where 1=1 and " + filterFieldName + "" + operators + "@" + filterFieldName + " ");
SqlParameter[] parameters = { new SqlParameter("@" + filterFieldName, filterValue) };
DataSet ds = DbHelper.Query(cps.ConnectionString, strSql.ToString(), parameters);
if (ds.Tables[0].Rows.Count > 0)
{
return ds.Tables[0].Rows[0];
}
else
{
return null;
}
}
else
{
return null;
}
}
///
/// 根据筛选条件获取一条数据DataRow对象(运算符是“=”)
///
/// 筛选条件字段名
/// 值
///
public DataRow GetDataRow(string filterFieldName, object filterValue)
{
return GetDataRow(filterFieldName, filterValue, "=");
}
///
/// 得到一个对象实体
///
public object DataRowToModel(DataRow row, object model)
{
if (row != null)
{
for (int i = 0; i < PropertyInfos.Length; i++)
{
try
{
System.Reflection.PropertyInfo propertyInfo = PropertyInfos[i];
string tempFieldName = propertyInfo.Name;//字段名
if (row[tempFieldName] != null)
{
object tempValue = row[tempFieldName];//对应字段值
DbHelper.SetPropertyValue(model, propertyInfo, tempValue);
}
}
catch
{
}
}
}
return model;
}
///
/// 获得数据列表
///
/// 条件语句 不包含 where 关键字
/// SQL排序 如:id desc
public DataSet GetList(string strWhere, string filedOrder = "SN desc")
{
return this.GetList(0, strWhere, filedOrder);
}
///
/// 获得全部数据列表
///
/// SQL排序 如:id desc
public DataSet GetAllList(string filedOrder = "SN desc")
{
return this.GetList("", filedOrder);
}
///
/// 获得前几行数据
///
/// 行数
/// 条件 不包含 where 关键字
/// SQL排序 如:id asc
///
public DataSet GetList(int Top, string strWhere, string filedOrder = "SN desc")
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select ");
if (Top > 0)
{
strSql.Append(" top " + Top.ToString());
}
strSql.Append(" " + this.TableFieldNameStr + " from " + this.TableName + " ");
if (strWhere.Trim() != "")
{
strSql.Append(" where 1=1 and (" + strWhere + ")");
}
strSql.Append(" order by " + filedOrder);
DataSet ds = DbHelper.Query(cps.ConnectionString, strSql.ToString());
ds.Tables[0].TableName = this.TableName;
return ds;
}
#endregion
#region 数据分页
///
/// 获取记录总数
///
public int GetRecordCount(string strWhere)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select count(1) FROM " + this.TableName + " ");
if (strWhere.Trim() != "")
{
strSql.Append(" where 1=1 and (" + strWhere + ")");
}
object obj = DbHelper.GetSingle(cps.ConnectionString, strSql.ToString());
if (obj == null)
{
return 0;
}
else
{
return Convert.ToInt32(obj);
}
}
///
/// 获取分页后总页数
///
/// 筛选条件
/// 页面大小
///
public int GetByPageCount(string strWhere, int pageSize)
{
int pageCount = 0;
if (pageSize > 0)
{
int allCount = GetRecordCount(strWhere);
pageCount = allCount / pageSize;
if (pageCount * pageSize < allCount)
{
pageCount++;
}
}
return pageCount;
}
public int GetByPageCount(string strWhere, int pageSize, ref int totalCount)
{
int pageCount = 0;
if (pageSize > 0)
{
int allCount = GetRecordCount(strWhere);
totalCount = allCount;
pageCount = allCount / pageSize;
if (pageCount * pageSize < allCount)
{
pageCount++;
}
}
return pageCount;
}
///
/// 分页获取数据列表
///
/// 筛选条件
/// 当前页 不能小于0的整数
/// 页面大小,每页显示条数 不能小于0的整数
/// 排序
///
public DataSet GetListByPage(string strWhere, int pageIndex, int pageSize, string orderby = "SN desc")
{
return this.GetListByPage(strWhere, orderby, (pageIndex - 1) * pageSize, pageIndex * pageSize);
}
///
/// 分页获取数据列表
///
/// 筛选条件
/// 排序
/// 当前页
/// 页面大小,每页显示条数
/// 返回总页数
///
public DataSet GetListByPage(string strWhere, string orderby, int pageIndex, int pageSize, ref int pageCount)
{
pageCount = GetByPageCount(strWhere, pageSize);
return this.GetListByPage(strWhere, orderby, (pageIndex - 1) * pageSize, pageIndex * pageSize);
}
///
/// 分页获取数据列表
///
/// 条件
/// 排序
/// 开始index
/// 结束index
///
public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
{
if (!string.IsNullOrEmpty(strWhere.Trim()))
{
strWhere = " Where " + strWhere;
}
if (!string.IsNullOrEmpty(orderby.Trim()))
{
orderby = " Order By " + orderby;
}
StringBuilder strSql = new StringBuilder();
strSql.Append("SELECT * FROM " + this.TableName + " Where ID Not IN ");
strSql.Append("(Select Top " + startIndex + " ID From " + this.TableName + " " + strWhere + orderby + ")");
strSql.Append(" And ID In ");
strSql.Append("(Select Top " + endIndex + " ID From " + this.TableName + " " + strWhere + orderby + ")");
strSql.Append(orderby);
DataSet ds = DbHelper.Query(cps.ConnectionString, strSql.ToString());
ds.Tables[0].TableName = this.TableName;
return ds;
}
#endregion
#region
///
/// Type转Dbtype
///
/// 变量的Type类型
/// 对应的DbType类型
public static SqlDbType GetDbType(Type type)
{
SqlDbType result = SqlDbType.NVarChar;
if (type.Equals(typeof(Int32)) || type.IsEnum)
result = SqlDbType.Int;
else if (type.Equals(typeof(Int64)))
result = SqlDbType.Int;
else if (type.Equals(typeof(Double)) || type.Equals(typeof(Double)))
result = SqlDbType.Decimal;
else if (type.Equals(typeof(DateTime)))
result = SqlDbType.DateTime;
else if (type.Equals(typeof(Boolean)))
result = SqlDbType.Bit;
else if (type.Equals(typeof(String)))
result = SqlDbType.NVarChar;
else if (type.Equals(typeof(Decimal)))
result = SqlDbType.Decimal;
else if (type.Equals(typeof(Byte[])))
result = SqlDbType.Image;
else if (type.Equals(typeof(Guid)))
result = SqlDbType.UniqueIdentifier;
return result;
}
#endregion
#region 优化sql新增修改的方法
///
/// 通过泛型实体生成更新语句和对象
///
///
///
///
///
///
///
///
///
public CommandInfo GetUpdateCommandInfoByEntity(T date, string filterFieldName = "ID",
string operators = "=", string overlookFieldList = "ID", string whereStr = null,
EffentNextType type = EffentNextType.None)
{
var properties = ReflectionHelper.GetProperties(typeof(T));
StringBuilder strSql = new StringBuilder();
Dictionary dicWhereData = new Dictionary();
strSql.Append("update " + this.TableName + " set ");
List parameterlist = new List();
var ignorePropertyNames = new HashSet();
var filterPropertyNames = new HashSet();
///跳过的字段数据
if (!string.IsNullOrEmpty(overlookFieldList))
{
foreach (var msg in overlookFieldList.Split(','))
{
ignorePropertyNames.Add(msg);
}
}
///用于查询的where条件的数据
if (!string.IsNullOrEmpty(filterFieldName))
{
foreach (var msg in filterFieldName.Split(','))
{
filterPropertyNames.Add(msg);
}
}
foreach (var property in properties)
{
var ignoreProperty = ignorePropertyNames.SingleOrDefault(x => x.Equals(property.Value.Name, StringComparison.CurrentCultureIgnoreCase));
var filterProperty = filterPropertyNames.SingleOrDefault(x => x.Equals(property.Value.Name, StringComparison.CurrentCultureIgnoreCase));
if (filterProperty != null)
{
dicWhereData.Add(property.Key, property.Value);
}
if (ignoreProperty != null)
continue;
var propertyType = ReflectionHelper.GetPropertyType(property.Value);
if (propertyType.Name.ToLower().IndexOf("list") != -1)
{
continue;
}
var propertyValue = ReflectionHelper.GetPropertyValue(date, property.Value);
if (propertyValue == null)
{
continue;
}
else if (propertyValue != null && propertyType.Name.ToLower().Equals("datetime") && propertyValue.ToString().Contains("0001"))
{
continue;
}
else if (propertyValue != null && propertyType.Name.ToLower().Equals("datetime") && Convert.ToDateTime(propertyValue) <= DbHelper.GetNullDateTime())
{
continue;
}
// ColumnAction(property.Value.Name, propertyValue, propertyType, DataTypes.Object, 0);
if (propertyValue != null)
{
strSql.Append("" + property.Key + "=@" + property.Key + ",");
SqlParameter parameter = new SqlParameter("@" + property.Key, propertyValue);
parameterlist.Add(parameter);
}
}
//去除结尾多余的“,”
if (strSql.ToString().LastIndexOf(',') == strSql.Length - 1)
{
strSql.Remove(strSql.Length - 1, 1);
}
if (whereStr == null)
{
if (filterFieldName != "" && operators != "")
{
string strWhere = "";
foreach (var property in dicWhereData)
{
if (!string.IsNullOrEmpty(strWhere))
{
strWhere += " and ";
}
strWhere += property.Key + operators + "@" + property.Key;
var propertyValue = ReflectionHelper.GetPropertyValue(date, property.Value);
parameterlist.Add(new SqlParameter("@" + property.Key, propertyValue));
}
strSql.Append(" where " + strWhere);
}
}
else
{
strSql.Append(" where 1=1 and (" + whereStr + ")");
}
SqlParameter[] parameters = parameterlist.ToArray();
return new CommandInfo(strSql.ToString(), parameters, type);
}
///
/// 通过泛型方法生成新增对象信息
///
///
///
///
///
///
public CommandInfo GetAddCommandInfoByEntity(T date, string overlookFieldList = "ID", EffentNextType type = EffentNextType.None)
{
StringBuilder strSql = new StringBuilder();
var properties = ReflectionHelper.GetProperties(typeof(T));
StringBuilder tempFieldNameString = new StringBuilder();
StringBuilder tempValueVariable = new StringBuilder();
List parameterlist = new List();
var ignorePropertyNames = new HashSet();
if (!string.IsNullOrEmpty(overlookFieldList))
{
foreach (var msg in overlookFieldList.Split(','))
{
ignorePropertyNames.Add(msg);
}
}
foreach (var property in properties)
{
var ignoreProperty = ignorePropertyNames.SingleOrDefault(x => x.Equals(property.Value.Name, StringComparison.CurrentCultureIgnoreCase));
if (ignoreProperty != null)
continue;
var propertyType = ReflectionHelper.GetPropertyType(property.Value);
if (propertyType.Name.ToLower().IndexOf("list") != -1)
{
continue;
}
var propertyValue = ReflectionHelper.GetPropertyValue(date, property.Value);
if (propertyValue == null)
{
continue;
}
if (propertyValue != null && propertyType.Name.ToLower().Equals("datetime") && propertyValue.ToString().Contains("0001"))
{
continue;
}
if (propertyValue != null && propertyType.Name.ToLower().Equals("datetime") && Convert.ToDateTime(propertyValue) <= DbHelper.GetNullDateTime())
{
continue;
}
else if (property.Key.ToLower() == "id" && propertyType == typeof(long) && (propertyValue == null || Convert.ToInt64(propertyValue) == 0))
{
propertyValue = DbHelper.GenerateId();
}
// ColumnAction(property.Value.Name, propertyValue, propertyType, DataTypes.Object, 0);
if (propertyValue != null)
{
tempFieldNameString.Append("" + property.Key + ",");
tempValueVariable.Append("@" + property.Key + ",");
SqlParameter parameter = new SqlParameter("@" + property.Key, propertyValue);
parameterlist.Add(parameter);
}
}
if (tempFieldNameString.ToString().LastIndexOf(',') == tempFieldNameString.Length - 1)
{
tempFieldNameString.Remove(tempFieldNameString.Length - 1, 1);
}
//去除结尾多余的“,”
if (tempValueVariable.ToString().LastIndexOf(',') == tempValueVariable.Length - 1)
{
tempValueVariable.Remove(tempValueVariable.Length - 1, 1);
}
strSql.Append("insert into " + this.TableName + "(");
strSql.Append("" + tempFieldNameString.ToString() + ")");
strSql.Append(" values (");
strSql.Append("" + tempValueVariable.ToString() + ")");
strSql.Append(";select @@IDENTITY");
SqlParameter[] parameters = parameterlist.ToArray();
return new CommandInfo(strSql.ToString(), parameters, type);
}
public object GetAddCommandInfoByEntity(T date, string overlookFieldList = "ID")
{
return GetAddCommandInfoByEntity(date, overlookFieldList, EffentNextType.None);
}
public object GetUpdateCommandInfoByEntity(T date, string filterFieldName = "ID", string operators = "=", string overlookFieldList = "ID", string whereStr = null)
{
return GetUpdateCommandInfoByEntity(date, filterFieldName, operators, overlookFieldList, whereStr, EffentNextType.None);
}
#endregion
#region 17-04-20 添加
///
/// 将数据列表转泛型数据
///
/// 泛型类型
/// 数据表数据
/// 数据集
public T GetListToEntity(DataTable dt)
{
var jSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
T entityList = Activator.CreateInstance();
entityList = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(dt), jSetting);
return entityList;
}
///
/// 将sql查询出来的数据转成泛型列表
///
/// 泛型类型
/// sql数据查询字符串
/// 数据集
public T GetListToEntity(string sql)
{
DataTable dt = GetViewDataSetByCustomer(sql).Tables[0];
return GetListToEntity(dt);
}
#endregion
public DataSet GetListByPage(string strWhere, string orderby, int pageIndex, int pageSize, ref int pageCount, ref int Totalcount)
{
pageCount = GetByPageCount(strWhere, pageSize, ref Totalcount);
return this.GetListByPage(strWhere, orderby, (pageIndex - 1) * pageSize, pageIndex * pageSize);
}
///
/// 获得数据列表
///
/// DataTable
public List