old_flsystem/类库/Api.Framework/Easy4/Common/ParamMap.cs

338 lines
8.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}