338 lines
8.8 KiB
C#
338 lines
8.8 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using Easy4net.DBUtility;
|
||
using Easy4net.Context;
|
||
|
||
namespace Easy4net.Common
|
||
{
|
||
/// <summary>
|
||
/// 参数映射集合类
|
||
/// </summary>
|
||
public class ParamMap : Map
|
||
{
|
||
/// <summary>
|
||
/// 是否分页
|
||
/// </summary>
|
||
private bool isPage;
|
||
/// <summary>
|
||
/// 页面偏移量
|
||
/// </summary>
|
||
private int pageOffset;
|
||
/// <summary>
|
||
/// 每页限制记录数
|
||
/// </summary>
|
||
private int pageLimit;
|
||
/// <summary>
|
||
/// 排序字段
|
||
/// </summary>
|
||
private string orderFields;
|
||
/// <summary>
|
||
/// 是否递减排序
|
||
/// </summary>
|
||
private bool isDesc = true;
|
||
|
||
/// <summary>
|
||
/// 数据库参数集合
|
||
/// </summary>
|
||
private List<IDbDataParameter> m_ParamList = new List<IDbDataParameter>();
|
||
|
||
/// <summary>
|
||
/// 创建一个参数映射集合
|
||
/// </summary>
|
||
private ParamMap() { }
|
||
|
||
/// <summary>
|
||
/// 排序的字段
|
||
/// </summary>
|
||
public string OrderFields
|
||
{
|
||
get { return orderFields; }
|
||
set { orderFields = value; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否递减排序
|
||
/// </summary>
|
||
public bool IsDesc
|
||
{
|
||
get { return isDesc; }
|
||
set { isDesc = value; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 创建一个参数映射集合
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static ParamMap NewMap()
|
||
{
|
||
ParamMap paramMap = new ParamMap();
|
||
return paramMap;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否进行分页
|
||
/// </summary>
|
||
public bool IsPage
|
||
{
|
||
get
|
||
{
|
||
return isPage;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 每页的偏移量
|
||
/// </summary>
|
||
public int PageOffset
|
||
{
|
||
get
|
||
{
|
||
if (this.ContainsKey("pageIndex") && this.ContainsKey("pageSize"))
|
||
{
|
||
int pageIndex = this.getInt("pageIndex");
|
||
int pageSize = this.getInt("pageSize");
|
||
if (pageIndex <= 0) pageIndex = 1;
|
||
if (pageSize <= 0) pageSize = 1;
|
||
|
||
return (pageIndex - 1) * pageSize;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 每页的记录条数限制
|
||
/// </summary>
|
||
public int PageLimit
|
||
{
|
||
get
|
||
{
|
||
if (this.ContainsKey("pageSize"))
|
||
{
|
||
return this.getInt("pageSize");
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据键值获取整型数据
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public int getInt(string key)
|
||
{
|
||
var value = this[key];
|
||
return Convert.ToInt32(value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据键值获取字符串数据
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public String getString(string key)
|
||
{
|
||
var value = this[key];
|
||
return Convert.ToString(value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据键值获取Double型数据
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public Double toDouble(string key)
|
||
{
|
||
var value = this[key];
|
||
return Convert.ToDouble(value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据键值获取Long型数据
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public Int64 toLong(string key)
|
||
{
|
||
var value = this[key];
|
||
return Convert.ToInt64(value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据键值获取Decimal型数据
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public Decimal toDecimal(string key)
|
||
{
|
||
var value = this[key];
|
||
return Convert.ToDecimal(value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据键值获取DateTime型数据
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public DateTime toDateTime(string key)
|
||
{
|
||
var value = this[key];
|
||
return Convert.ToDateTime(value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设置排序字段及排序方式
|
||
/// </summary>
|
||
/// <param name="orderFields">排序字段</param>
|
||
/// <param name="isDesc">是否为递减排序</param>
|
||
public void setOrderFields(string orderFields, bool isDesc)
|
||
{
|
||
this.orderFields = orderFields;
|
||
this.isDesc = isDesc;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 此方法已过时,请使用 setPageParamters方法分页
|
||
/// </summary>
|
||
/// <param name="pageIndex"></param>
|
||
[Obsolete("此方法已过时,请使用 setPageParamters方法分页")]
|
||
private void setPageIndex(int pageIndex)
|
||
{
|
||
this["pageIndex"] = pageIndex;
|
||
setPages();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 此方法已过时,请使用 setPageParamters方法分页
|
||
/// </summary>
|
||
/// <param name="pageSize"></param>
|
||
[Obsolete("此方法已过时,请使用 setPageParamters方法分页")]
|
||
private void setPageSize(int pageSize)
|
||
{
|
||
this["pageSize"] = pageSize;
|
||
setPages();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 分页参数设置
|
||
/// </summary>
|
||
/// <param name="page">第几页,从0开始</param>
|
||
/// <param name="limit">每页最多显示几条数据</param>
|
||
public void setPageParamters(int page, int limit)
|
||
{
|
||
this["pageIndex"] = page;
|
||
this["pageSize"] = limit;
|
||
setPages();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设置分页参数
|
||
/// </summary>
|
||
private void setPages()
|
||
{
|
||
Session session = SessionThreadLocal.Get();
|
||
|
||
if (this.ContainsKey("pageIndex") && this.ContainsKey("pageSize"))
|
||
{
|
||
this.isPage = true;
|
||
if (session.DbFactory.DbType == DatabaseType.MYSQL || session.DbFactory.DbType == DatabaseType.SQLITE)
|
||
{
|
||
this["offset"] = this.PageOffset;
|
||
this["limit"] = this.PageLimit;
|
||
|
||
this.Remove("pageIndex");
|
||
this.Remove("pageSize");
|
||
|
||
this.Add("offset", this.getInt("offset"));
|
||
this.Add("limit", this.getInt("limit"));
|
||
}
|
||
|
||
if (session.DbFactory.DbType == DatabaseType.SQLSERVER)
|
||
{
|
||
int pageIndex = this.getInt("pageIndex");
|
||
int pageSize = this.getInt("pageSize");
|
||
if (pageIndex <= 0) pageIndex = 1;
|
||
if (pageSize <= 0) pageSize = 1;
|
||
|
||
this["pageStart"] = (pageIndex - 1) * pageSize + 1;
|
||
this["pageEnd"] = pageIndex * pageSize;
|
||
|
||
this.Remove("pageIndex");
|
||
this.Remove("pageSize");
|
||
|
||
this.Add("pageStart", this.getInt("pageStart"));
|
||
this.Add("pageEnd", this.getInt("pageEnd"));
|
||
}
|
||
|
||
if (session.DbFactory.DbType == DatabaseType.ACCESS)
|
||
{
|
||
int pageIndex = this.getInt("pageIndex");
|
||
int pageSize = this.getInt("pageSize");
|
||
|
||
this["page_offset"] = pageIndex * pageSize;
|
||
this["page_limit"] = pageSize;
|
||
|
||
this.Remove("pageIndex");
|
||
this.Remove("pageSize");
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加键值对映射
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <param name="value"></param>
|
||
public override void Add(object key, object value)
|
||
{
|
||
base.Put(key, value);
|
||
|
||
Session session = SessionThreadLocal.Get();
|
||
|
||
IDbDataParameter param = session.DbFactory.CreateDbParameter(key.ToString(), value);
|
||
m_ParamList.Add(param);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加键值对映射
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <param name="value"></param>
|
||
public new void Put(object key, object value)
|
||
{
|
||
this.Add(key, value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加键值对映射
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <param name="value"></param>
|
||
public new void setParameter(string key, object value)
|
||
{
|
||
this.Add(key, value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 输出参数集合
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public IDbDataParameter[] toDbParameters()
|
||
{
|
||
int i = 0;
|
||
IDbDataParameter[] paramArr = new IDbDataParameter[m_ParamList.Count];
|
||
foreach (IDbDataParameter dbParameter in m_ParamList)
|
||
{
|
||
paramArr[i] = dbParameter;
|
||
i++;
|
||
}
|
||
|
||
return paramArr;
|
||
}
|
||
}
|
||
}
|