using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Data;
using System.Data.Common;
using System.Reflection;
using Ant.Data;
using System.Transactions;
using System.Configuration;
using Ant.Frame;
using Ant.ORM;
using Ant.Common;
using Ant.Descriptors;
using System.Linq;
namespace Ant.ORM
{
///
/// 单表操作数据持久类
/// 要求配置Ant.Data配置节
///
public static class PersistSingle
{
private static object lockHelper = new object();
//private static string logfile = ConfigurationManager.AppSettings["DataDynamicsARLic"].ToLower();
private static Dictionary SqlCmd = new Dictionary();
#region 将实体转成SQL语句
#region 添加修改方法
///
/// 保存数据
///
///
///
///
public static ResponseModel SaveDesc(this T entity, RequestModel request)
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
try
{
TypeDescriptor md = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
if (request.db.IsNull())
request.db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
if (request.db.IsNull())
{
result.IsSuccess = false;
result.Message = "数据库配置不正确";
return result;
}
if (request.newSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
else
{
if (request.newSt.NewSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(request.db.DatabaseType);//构建生成哪种SQL语句
qcBuilder.TypeDes = md;//所有实体属性
qcBuilder.PersistType = md.PersistType;
cmd = qcBuilder.GetQueryCommand();//解析SQL语句
System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
if (sfs.Count() > 0)
{
System.Diagnostics.StackFrame infos = sfs[0];
System.Reflection.MethodBase mb = infos.GetMethod();
var filename = infos.GetFileName();
sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
}
result.DBConfig = request.db.ConnectionString;
int num = 0; var location = cmd.CommandText.EndsWith(ConstSql.SQL_SCOPE_IDENTITY, StringComparison.CurrentCultureIgnoreCase);
if (location)
{
num = (!cmd.CommandText.IsEmpty()) ? request.db.ExecuteScalar(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters).ToInt32() : 0;//执行SQL语句
result.RecordNum = num;
}
else
{
num = (!cmd.CommandText.IsEmpty()) ? request.db.ExecuteNonQuery(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters).ToInt32() : 0;
}
result.IsSuccess = num > 0;
sw.Stop();
string str = sw.Elapsed.ToString();
result.Message = "保存成功,用时:" + str;
sw = null;
}
catch (Exception ex)
{
//LogHelper.WriteExLog(ex);
result.IsSuccess = false;
result.Message = ex.ToString();
}
finally
{
string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment);
result.StrSql = showsqlstr;
if (request.db.IfNotNull()) request.db.Close();
}
return result;
}
///
/// 根据查询实体去批量更新数据
///
///
///
///
public static ResponseModel UpdateEntityDesc(this object entity, ResquestUpdateModel request)
{
ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
try
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
TypeDescriptor md = (request.QueryModel.IfNotNull()) ? TypeDescriptor.ParserMeta(entity, request.QueryModel) : TypeDescriptor.ParserMeta(entity);//获取实体的元数据
if (request.db.IsNull()) request.db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
if (request.db.IsNull())
{
result.IsSuccess = false;
result.Message = "数据库配置不正确";
return result;
}
if (request.newSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
else
{
if (request.newSt.NewSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(request.db.DatabaseType);////构建生成哪种SQL语句
qcBuilder.TypeDes = md;
qcBuilder.PersistType = EntityPersistType.Update;
qcBuilder.Predicate = request.Predicate;
cmd = qcBuilder.GetQueryCommand();//解析SQL语句
int num = request.db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters);//执行SQL语句
sw.Stop();
string str = sw.Elapsed.ToString();
result.IsSuccess = num > 0;
result.Message = "数据更新成功,用时:" + str;
}
catch (Exception ex)
{
result.IsSuccess = false;
result.Message = ex.ToString();
}
finally
{
result.StrSql = cmd.SqlString;
result.DBConfig = request.db.ConnectionString;
if (!request.db.IsNull()) request.db.Close();
}
return result;
}
///
/// 更新自带Where条件的数据
///
/// 更新的数据
/// 更新的条件
/// 连接数据库对象
///
public static bool UpdateEntity(object entyvlaue, object filter, DataAccess db = null)
{
try
{
SqlCmd = new Dictionary();
TypeDescriptor md = TypeDescriptor.ParserMeta(entyvlaue, filter);//获取实体的元数据
if (!string.IsNullOrEmpty(md.WhereSql))
{
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//根据不同的数据库类型创建不同的SQL语句的类
qcBuilder.TypeDes = md;
qcBuilder.PersistType = EntityPersistType.Update;
qcBuilder.Fields = MetaDataManager.GetEntityFields(entyvlaue);
QueryCommand cmd = qcBuilder.GetQueryCommand();//解析SQL语句
SqlCmd.Add(cmd.CommandText, cmd.Parameters);
int num = db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters);//执行SQL语句
return num > 0;
}
else
{
SqlCmd.Add("没有更新Where条件,无法更新操作", null);
return false;
}
}
catch (Exception ex)
{
return false;
}
finally
{
if (!db.IsNull()) db.Close();
}
}
#endregion
#region 删除DELETE方法
///
/// 删除最终方法
///
///
///
///
///
public static ResponseModel DeleteDesc(this object entity, RequestModel request)
{
ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
try
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
TypeDescriptor md = TypeDescriptor.ParserMeta(entity); //获取实体的元数据
if (request.db.IsNull()) request.db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
if (request.db.IsNull())
{
result.IsSuccess = false;
result.Message = "数据库配置不正确";
return result;
}
if (request.newSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
else
{
if (request.newSt.NewSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(request.db.DatabaseType);////构建生成哪种SQL语句
qcBuilder.TypeDes = md;
qcBuilder.PersistType = EntityPersistType.Delete;
cmd = qcBuilder.GetQueryCommand();
System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
if (sfs.Count() > 0)
{
System.Diagnostics.StackFrame infos = sfs[0];
System.Reflection.MethodBase mb = infos.GetMethod();
var filename = infos.GetFileName();
sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
}
int num = request.db.ExecuteNonQuery(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters);//执行SQL语句
sw.Stop();
string str = sw.Elapsed.ToString();
result.IsSuccess = num > 0;
result.Message = "删除成功,用时:" + str;
sw = null;
}
catch (Exception ex)
{
//LogHelper.WriteExLog(ex);
//
result.IsSuccess = false;
result.Message = ex.ToString();
}
finally
{
result.StrSql = cmd.SqlString;
result.DBConfig = request.db.ConnectionString;
if (!request.db.IsNull()) request.db.Close();
}
return result;
}
///
/// 删除操作
/// public static bool DeleteById(this object entity, string oid, DataAccess db = null) where T : EntityBase, new()
///
///
///
///
///
///
public static bool DeleteById(this object entity, string oid, DataAccess db = null)
{
SqlCmd = new Dictionary();
try
{
TypeDescriptor md = TypeDescriptor.ParserMeta(entity); //获取实体的元数据
md.WhereSql = ModPerkey(md.PrimaryKey.MemberInfo.Name, oid);//自定义查询
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
using (db)
{
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
qcBuilder.TypeDes = md;
qcBuilder.PersistType = EntityPersistType.Delete;
QueryCommand cmd = qcBuilder.GetQueryCommand();
int num = 0;
SqlCmd.Add(cmd.CommandText, cmd.Parameters);
num = db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters);//执行SQL语句
return num > 0;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (!db.IsNull()) db.Close();
}
}
#endregion
#region 获取单个实体
///
/// 获取单个实体简化版
///
/// 实体类型
/// 主键ID
/// 数据库对象
///
public static dynamic GetById(this object entity, string oid, DataAccess db = null)
{
var obj = Activator.CreateInstance(entity.GetType()); SqlCmd = new Dictionary();
try
{
if (!string.IsNullOrEmpty(oid))
{
QueryCommandBuilders querycommd = new QueryCommandBuilders();
TypeDescriptor md = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
using (db)
{
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
qcBuilder.TypeDes = md;
qcBuilder.PersistType = EntityPersistType.Query;
md.WhereSql = ModPerkey(md.PrimaryKey.MemberInfo.Name, oid);//自定义查询
qcBuilder.Top = "1";
qcBuilder.SqlType = SqlEnum.MainSql;
QueryCommand cmd = qcBuilder.GetQueryCommand();
SqlCmd.Add(cmd.CommandText, cmd.Parameters);
using (IDataReader rdr = db.ExecuteDataReader(cmd.CommandText, cmd.Parameters))
{
obj = DataToModel.Dr2EnObj(rdr, entity);
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (!db.IsNull()) db.Close();
}
return obj;
}
///
/// 获取单个实体最终方法
///
///
///
///
public static ResponseModel GetEntityDesc(this object entity, RequestModel request)
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
object obj = Activator.CreateInstance(entity.GetType());
DataAccess db = request.db;
var result = new ResponseModel(); var typeDescriptor = TypeDescriptor.ParserMeta(entity);
QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
try
{
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(typeDescriptor.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
if (db.IsNull())
{
result.IsSuccess = false;
result.Message = "数据库配置不正确";
return result;
}
if (request.newSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
else
{
if (request.newSt.NewSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType); //构建生成哪种SQL语句
qcBuilder.TypeDes = typeDescriptor;
qcBuilder.PersistType = EntityPersistType.Query;
//qcBuilder.SelectField = enty.SelectField;
qcBuilder.Predicate = request.Predicate;
qcBuilder.Top = "1";
qcBuilder.SqlType = SqlEnum.MainSql;
qcBuilder.Sort = request.Sort;
cmd = qcBuilder.GetQueryCommand(); //生成SQL语句和参数
System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
if (sfs.Count() > 0)
{
System.Diagnostics.StackFrame infos = sfs[0];
System.Reflection.MethodBase mb = infos.GetMethod();
var filename = infos.GetFileName();
sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
}
using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters))
{
DataTable dtt = DataToModel.Dr2Dt(rdr);
obj = DataToModel.Dt2EnObj(dtt, entity);
}
sw.Stop();
string str = sw.Elapsed.ToString();
result.IsSuccess = obj.IfNotNull();
result.ResultModel = obj;
result.Message = "获取实体成功,用时:" + str;
return result;
}
catch (Exception ex)
{
//LogHelper.WriteExLog(ex);
result.IsSuccess = false;
result.Message = ex.ToString();
return result;
}
finally
{
string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment);
result.StrSql = showsqlstr;
result.DBConfig = db.ConnectionString;
if (!db.IsNull()) db.Close();
}
}
#endregion
#region 分页查询调用方法
///
/// 获取分页数据返回实体集合
///
///
///
public static ResponseModel GetPageListEnd(this object entity, RequestModel request)
{
var result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
var db = request.db;
try
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
//QueryCommandBuilders querycommd = new QueryCommandBuilders();
var typeDescriptor = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
//if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
if (db.IsNull())
{
result.IsSuccess = false;
result.Message = "数据库配置不正确";
return result;
}
if (request.newSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
else
{
if (request.newSt.NewSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
qcBuilder.TypeDes = typeDescriptor;//实体属性
qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式
qcBuilder.PageNo = request.StartNum;
qcBuilder.PageSize = request.PageSize;
//qcBuilder.SelectField = enty.SelectField;
qcBuilder.ShowField = request.ShowField;
qcBuilder.Predicate = request.Predicate;
cmd = qcBuilder.GetQueryCommand();
System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
string sqlWithComment = string.Empty;
if (sfs.Count() > 0)
{
System.Diagnostics.StackFrame infos = sfs[0];
System.Reflection.MethodBase mb = infos.GetMethod();
var filename = infos.GetFileName();
sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
}
var dt = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters);
var objlist = DataToModel.Dr2EnList(dt, entity);
sw.Stop();
string str = sw.Elapsed.ToString();
result.IsSuccess = true;
result.ResultModel = objlist;
result.RecordNum = PageSumEnd(typeDescriptor, db, sqlWithComment).RecordNum;
result.Message = "查询成功,用时:" + str;
return result;
}
catch (Exception ex)
{
//LogHelper.WriteExLog(ex);
result.IsSuccess = false;
result.Message = ex.ToString();
cmd = new QueryCommand();
return result;
}
finally
{
result.StrSql = cmd.SqlString;
result.DBConfig = db.ConnectionString;
if (!db.IsNull()) db.Close();
}
}
///
/// 带分页的统计记录
///
///
///
///
///
private static ResponseModel PageSumEnd(TypeDescriptor md, DataAccess db, string sqlWithComment)
{
ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
try
{
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
qcBuilder.TypeDes = md;
qcBuilder.PersistType = EntityPersistType.Sum;
cmd = qcBuilder.GetQueryCommand();
var num = db.ExecuteScalar(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters).ToInt32();
result.RecordNum = num;
result.IsSuccess = true;
result.Message = "返回成功";
}
catch (Exception ex)
{
//LogHelper.WriteExLog(ex);
result.IsSuccess = false;
result.Message = ex.ToString();
}
finally
{
result.StrSql = cmd.SqlString;
result.DBConfig = db.ConnectionString;
if (!db.IsNull()) db.Close();
}
return result;
}
///
/// 获取分页数据
///
///
///
///
//private ResponseTable GetPageRecordDtEnd(string showfield, int startNum, int pageSize)
public static ResponseModel GetPageRecordDtEnd(this object entity, RequestModel enty)
{
DataAccess db = enty.db; QueryCommand cmd = new QueryCommand();
ResponseModel result = new ResponseModel();
try
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
var typeDescriptor = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(typeDescriptor.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
if (db.IsNull())
{
result.IsSuccess = false;
result.Message = "数据库配置不正确";
return result;
}
if (enty.newSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
else
{
if (enty.newSt.NewSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
qcBuilder.TypeDes = typeDescriptor;//实体属性
qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式
qcBuilder.PageNo = enty.StartNum;
qcBuilder.PageSize = enty.PageSize;
//qcBuilder.SelectField = enty.SelectField;
qcBuilder.ShowField = enty.ShowField;
cmd = qcBuilder.GetQueryCommand();
System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames();
string sqlWithComment = string.Empty;
if (sfs.Count() > 0)
{
System.Diagnostics.StackFrame infos = sfs[0];
System.Reflection.MethodBase mb = infos.GetMethod();
var filename = infos.GetFileName();
sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
}
DataTable dt = db.ExecuteDataTable(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters);
sw.Stop();
string str = sw.Elapsed.ToString();
result.IsSuccess = dt.Rows.Count > 0;
result.RecordNum = PageSumEnd(typeDescriptor, db, sqlWithComment).RecordNum;
result.DataTable = dt;
result.Message = "查询返回成功,用时:" + str;
return result;
}
catch (Exception ex)
{
//LogHelper.WriteExLog(ex);
result.IsSuccess = false;
result.Message = ex.ToString();
return result;
}
finally
{
result.StrSql = cmd.SqlString;
result.DBConfig = db.ConnectionString;
if (!db.IsNull()) db.Close();
}
}
#region 分页查询
///
/// 分页查询startNum开始记录,pageSize几条记录进行分页
///
///
/// 所有参数及查询条件
/// 页数
/// 开始记录
/// 返回查询的记录
public static DataTable GetPageDataTable(object entity, int startNum, int pageSize)
{
DataTable dt = new DataTable(); DataAccess db = null; SqlCmd = new Dictionary();
try
{
if (entity != null)
{
QueryCommandBuilders querycommd = new QueryCommandBuilders();
MetaData md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
qcBuilder.Md = md;
qcBuilder.PersistType = EntityPersistType.QueryPage;
qcBuilder.PageNo = startNum;
qcBuilder.PageSize = pageSize;
QueryCommand cmd = qcBuilder.GetQueryCommand();
querycommd.Add(qcBuilder);
SqlCmd.Add(cmd.CommandText, cmd.Parameters);
dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters);
}
}
catch (Exception ex)
{
}
finally
{
if (!db.IsNull()) db.Close();
}
return dt;
}
///
/// 分页查询startNum开始记录,pageSize几条记录进行分页
///
///
/// 所有参数及查询条件
/// 页数
/// 开始记录
/// 返回查询的记录
public static DataSet GetPageDataSet(object entity, int startNum, int pageSize)
{
DataAccess db = null; SqlCmd = new Dictionary();
try
{
if (entity != null)
{
QueryCommandBuilders querycommd = new QueryCommandBuilders();
MetaData md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
qcBuilder.Md = md;
qcBuilder.PersistType = EntityPersistType.QueryPage;
qcBuilder.PageNo = startNum;
qcBuilder.PageSize = pageSize;
QueryCommand cmd = qcBuilder.GetQueryCommand();
querycommd.Add(qcBuilder);
SqlCmd.Add(cmd.CommandText, cmd.Parameters);
return db.ExecuteDataSet(cmd.CommandText, cmd.Parameters);
}
else
return new DataSet();
}
catch (Exception ex)
{
return new DataSet();
}
finally
{
if (!db.IsNull()) db.Close();
}
}
///
/// 分页查询startNum开始记录,pageSize几条记录进行分页
///
///
/// 所有参数及查询条件
/// 页数
/// 开始记录
/// 返回查询的记录
public static List GetPageList(object entity, int startNum, int pageSize) where T : EntityBase, new()
{
List objlist = new List(); DataAccess db = null; SqlCmd = new Dictionary();
try
{
QueryCommandBuilders querycommd = new QueryCommandBuilders();
MetaData md = new MetaData();
if (entity != null)
{
md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
qcBuilder.Md = md;
qcBuilder.PersistType = EntityPersistType.QueryPage;
qcBuilder.PageNo = startNum;
qcBuilder.PageSize = pageSize;
QueryCommand cmd = qcBuilder.GetQueryCommand();
querycommd.Add(qcBuilder);
SqlCmd.Add(cmd.CommandText, cmd.Parameters);
DataTable dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters);
if (!object.Equals(dt, null)) objlist = DataToModel.Dt2EnList(dt);
}
}
catch (Exception ex)
{
}
finally
{
if (!db.IsNull()) db.Close();
}
return objlist;
}
#endregion
#region 统计表记录
///
/// 数据的总记录
///
///
public static ResponseModel SumDesc(this object entity, RequestModel request)
{
DataAccess db = null; ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
try
{
var typeDescriptor = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(typeDescriptor.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
if (db.IsNull())
{
result.IsSuccess = false;
result.Message = "数据库配置不正确";
return result;
}
if (request.newSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
else
{
if (request.newSt.NewSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
}
System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
if (sfs.Count() > 0)
{
System.Diagnostics.StackFrame infos = sfs[0];
System.Reflection.MethodBase mb = infos.GetMethod();
var filename = infos.GetFileName();
sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
}
return PageSumEnd(typeDescriptor, db, sqlWithComment);
}
catch (Exception ex)
{
//LogHelper.WriteExLog(ex);
result.IsSuccess = false;
result.Message = ex.ToString();
}
finally
{
result.StrSql = cmd.SqlString;
result.DBConfig = db.ConnectionString;
if (!db.IsNull()) db.Close();
}
return result;
}
///
/// 统计表记录
///
/// 实体类型
///
public static int Sum(this object entity)
{
DataAccess db = null; SqlCmd = new Dictionary();
try
{
if (entity != null)
{
QueryCommandBuilders querycommd = new QueryCommandBuilders();
var typeDescriptor = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(typeDescriptor.ModuleName);//创建数据库连接
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
qcBuilder.TypeDes = typeDescriptor;
qcBuilder.PersistType = EntityPersistType.Sum;
QueryCommand cmd = qcBuilder.GetQueryCommand();
SqlCmd.Add(cmd.CommandText, cmd.Parameters);
return Convert.ToInt32(db.ExecuteScalar(cmd.CommandText, cmd.Parameters));
}
else
return 0;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (!db.IsNull()) db.Close();
}
}
#endregion
#endregion
#region 查询SELECT方法
#region GetDataReaderList方法
///
/// 由DataReader转DataTable
///
///
///
///
public static ResponseModel GetDr2DtListEnd(this object entity, RequestModel request)
{
var result = new ResponseModel(); DataAccess db = request.db; QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
try
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
TypeDescriptor md = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
if (db.IsNull())
{
result.IsSuccess = false;
result.Message = "数据库配置不正确";
return result;
}
if (request.newSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
else
{
if (request.newSt.NewSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
qcBuilder.TypeDes = md;
//qcBuilder.SelectField = enty.SelectField;
qcBuilder.ShowField = request.ShowField;
if (request.TopNum > 0)
qcBuilder.Top = request.TopNum.ToString();
qcBuilder.PersistType = EntityPersistType.Query;//操作方式
cmd = qcBuilder.GetQueryCommand();
DataTable dt = new DataTable();
//dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters);
//sw.Stop();
//string str = sw.Elapsed.ToString();
System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
if (sfs.Count() > 0)
{
System.Diagnostics.StackFrame infos = sfs[0];
System.Reflection.MethodBase mb = infos.GetMethod();
var filename = infos.GetFileName();
sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
}
using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters))
{
dt = DataToModel.Dr2Dt(rdr);
}
sw.Stop();
string str = sw.Elapsed.ToString();
result.IsSuccess = dt.IsHaveRows();
result.DataTable = dt;
result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", dt.Rows.Count, str);
return result;
}
catch (Exception ex)
{
//LogHelper.WriteExLog(ex);
result.IsSuccess = false;
result.Message = ex.ToString();
return result;
}
finally
{
string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment);
result.StrSql = showsqlstr;
result.DBConfig = db.ConnectionString;
if (!db.IsNull()) db.Close();
}
return result;
}
///
/// 通过DataReader返回List集合这种效率高
///
/// 显示字段
/// 数据对象
/// 返回Object类型的数据
public static ResponseModel GetDr2EnListEnd(this object entity, RequestModel request)
{
var result = new ResponseModel(); DataAccess db = request.db; QueryCommand cmd = new QueryCommand();
try
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
TypeDescriptor md = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
if (db.IsNull())
{
result.IsSuccess = false;
result.Message = "数据库配置不正确";
return result;
}
if (request.newSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
else
{
if (request.newSt.NewSt.IsNull())
{
result.IsSuccess = false;
result.Message = "备注信息不能为空";
return result;
}
}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
qcBuilder.TypeDes = md;
qcBuilder.ShowField = request.ShowField;
if (request.TopNum > 0)
qcBuilder.Top = request.TopNum.ToString();
qcBuilder.PersistType = EntityPersistType.Query;//操作方式
cmd = qcBuilder.GetQueryCommand();
List objlist = new List();
System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
string sqlWithComment = string.Empty;
if (sfs.Count() > 0)
{
System.Diagnostics.StackFrame infos = sfs[0];
System.Reflection.MethodBase mb = infos.GetMethod();
var filename = infos.GetFileName();
sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
}
using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters))
{
objlist = DataToModel.Dr2EnList(rdr);
}
sw.Stop();
string str = sw.Elapsed.ToString();
result.IsSuccess = objlist.Count > 0;
if (result.IsSuccess)
{
result.ResultModel = objlist;
result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", objlist.Count, str);
}
else
{
result.Message = "返回失败";
result.StrSql = cmd.SqlString;
}
return result;
}
catch (Exception ex)
{
//LogHelper.WriteExLog(ex);
result.IsSuccess = false;
result.Message = ex.ToString();
return result;
}
finally
{
result.DBConfig = db.ConnectionString;
if (!db.IsNull()) db.Close();
}
}
///
/// 通过DataReader返回List集合这种效率高
///
/// 实体
/// 查询条件
/// 返回Object类型的数据
public static object GetDataReaderList(this object entity)
{
DataAccess db = null; SqlCmd = new Dictionary();
try
{
if (entity != null)
{
QueryCommandBuilders querycommd = new QueryCommandBuilders();
MetaData md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
qcBuilder.Md = md;
qcBuilder.PersistType = EntityPersistType.Query;//操作方式
QueryCommand cmd = qcBuilder.GetQueryCommand();
querycommd.Add(qcBuilder);
object objlist = new object();
SqlCmd.Add(cmd.CommandText, cmd.Parameters);
using (IDataReader rdr = db.ExecuteDataReader(cmd.CommandText, cmd.Parameters))
{
objlist = DataToModel.Dr2EnList(rdr, entity);
}
return objlist;
}
else
return null;
}
catch (Exception ex)
{
return null;
}
finally
{
if (!db.IsNull()) db.Close();
}
}
///
/// 通过DataReader返回List集合这种效率高
///
/// 实体
/// 查询条件
/// 返回的实体本身的数据
public static object GetDataReaderList(object entity)
{
DataAccess db = null; SqlCmd = new Dictionary();
try
{
if (entity != null)
{
QueryCommandBuilders querycommd = new QueryCommandBuilders();
MetaData md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
qcBuilder.Md = md;
qcBuilder.PersistType = EntityPersistType.Query;//操作方式
QueryCommand cmd = qcBuilder.GetQueryCommand();
querycommd.Add(qcBuilder);
List objt = new List(); List