ORMBase对象/关系型数据库映射在MVC中的应用(二)
3、DataBase基类,查询方法返回值是List<T>,并且是分页的,ThePart.dll版本2.0中封装了一个PageInfo类,作为分页的类型。这种方法很机械,也很狗血..建议大家不这么用,下面这个例子是项目中同事写的。为了DataBase这个基类的操作数据库返回值各种类型,让人们知道各种情况的数据都可以处理。的这么一个目的,我还是把例子贴出来。我自己都难得去费神看。
public static List<SportsBetRecords> SportsGetListPager(string SaleID, string UserName, string status, string classtype, string StarTime, string EndTime, int? pSize, int? pIndex, out int count)
{
pSize = pSize ?? 10; //每页最大记录数
pIndex = pIndex ?? 1; //当前第几页
PagerInfo pager = new PagerInfo(); //ThePart.dll中封装的这么一个分页类PagerInfo
pager.ProcName = "pr_Pager2005"; //需要的数据库的存储过程
pager.TableNames = "SportsBetRecords"; //需要操作的数据库表名
pager.PageSize = (int)pSize; //最大记录数
pager.CurrentPage = (int)pIndex; //当前第几页
StringBuilder sb = new StringBuilder("1=1 and SaleID='" + SaleID + "'"); //可变字符串的条件
if (!string.IsNullOrEmpty(UserName))
sb.Append(" and UserName='" + UserName + "'");
if (!string.IsNullOrEmpty(StarTime) && !string.IsNullOrEmpty(EndTime))
sb.Append(" and [T] between '" + Convert.ToDateTime(StarTime) + "' and '" + Convert.ToDateTime(EndTime).AddDays(1) + "'");
pager.Condition = sb.ToString(); //sql里面where后的条件
pager.Count = 1;
pager.Fields = "*";
pager.IndexName = "Id";
pager.OrderNames = "[T] desc";
List<SportsBetRecords> recordList = ORMBase.GetList<SportsBetRecords>(ref pager);
count = pager.Count;
return recordList;
}
以下是相应该存储过程:
USE [Casino]
GO
/****** Object: StoredProcedure [dbo].[pr_Pager2005] Script Date: 05/13/2014 15:05:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[pr_Pager2005]
(
@TableNames VARCHAR(4000), -- 表名
@Fields VARCHAR(1000) = '*', -- 需要返回的列(不能有相同的字段出现,如有相同字段,可把第一个外的其它字段转为别名,如:b.ID As bID)
@Condition VARCHAR(1500) = '', -- 查询条件
@IndexName VARCHAR(20) = 'ID', -- 主索引字段(此处作废,只为兼容)
@PageSize INT = 20, -- 每页记录数
@CurrentPage INT = 1, -- 当前页码
@OrderNames VARCHAR(50) = '', -- 排序字段,要包括排序类型
@OrderType BIT = 1, -- 排序类型,0-降序 1-升序(默认)(此处作废,只为兼容)
@Count INT=null OUTPUT ,
@Distinct VARCHAR(9)='', --去重复记录distinct
@GroupBy VARCHAR(100)='',
@TSQL nVARCHAR(4000)='' OUTPUT --本次执行的TSQL语句或在分页前执行的TSQL
)
AS
DECLARE @SQL nVARCHAR(max) -- 主语句
DECLARE @OrderBy VARCHAR(300) -- 排序
DECLARE @StartRow INT,@ENDRow INT
SET @SQL = ''
BEGIN
SET NOCOUNT ON
IF(@CurrentPage<1)
SET @CurrentPage = 1
SET @StartRow = (@CurrentPage-1)*@PageSize+1
SET @ENDRow = @CurrentPage*@PageSize
IF(@Condition != '')
SET @Condition = ' Where ' + @Condition
IF(@GroupBy!='')
SET @GroupBy = ' Group By ' + @GroupBy
IF(@Distinct!='')
SET @Distinct = @Distinct + ' '
IF(@OrderNames = '')
SET @OrderBy = ''
ELSE
SET @OrderBy = ' Order By ' + @OrderNames
IF ((@Count is not null) And @Count > 0 )
BEGIN
IF(@GroupBy='')
SET @SQL = @TSQL + ' Select ' +@Distinct+ ' @c=Count(0) From ' + @TableNames + @Condition
ELSE
SET @SQL = @TSQL + ' Select ' +@Distinct+ ' @c=Count(0) From (Select 0 As ID From ' + @TableNames + @Condition + @GroupBy +') As T'
EXEC sp_executesql @SQL,N'@c INT OUTPUT',@Count OUTPUT
END
--以下实现了带Group By和不带Group By的情况
IF(@GroupBy='')
Begin
SET @SQL = @TSQL + ' With T1 As ( Select ' + @Distinct + @Fields + ',Row_Number() Over (' + @OrderBy +') As RowNo From ' + @TableNames + @Condition + ' ) '
SET @SQL = @SQL + 'Select * From T1 Where RowNo Between ' + Cast(@StartRow As VARCHAR) + ' And ' + Cast(@ENDRow AS VARCHAR)
END
ELSE
Begin
SET @SQL = @TSQL + ' With T1 As ( Select ' + @Distinct + @Fields +' From ' + @TableNames + @Condition + @GroupBy + ' ) '
SET @SQL = @SQL + 'Select * From (Select *,Row_Number() Over (' + @OrderBy +') As RowNo From T1) As T2 Where RowNo Between ' + Cast(@StartRow As VARCHAR) + ' And ' + Cast(@ENDRow As VARCHAR)
END
END
EXEC (@SQL)
4、根据sql后面where条件查询直接返回实体
/// <summary>
/// 根据ID查询等级表信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static MemberGrade GetMemberGById(int id)
{
return MemberGrade.GetInfo<MemberGrade>("ID=@ID", new object[] { id });
}
5、直接返回所有List表记录:不需要查询条件和写sql语句
public static UserDetail GetModelAllInfo(int id)
{
return UserDetail.ExecQuery<UserDetail>("select * from Users u
left join UserInfo ui on u.Id=ui.UserId where u.Id=" + id, new object[] {
});
}
6、直接返回所有List表记录:不需要查询条件和写sql语句。 实体类.GetList<实体类>(0)
public static List<BetResultInfo> BetRInfo()
{
return BetResultInfo.GetList<BetResultInfo>(0);
}
7、根据Sql后面where条件直接查询返回List<实体信息>:
/// <summary>
/// 根据会员名查询会员列表信息
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static List<Members> GetMemberList(string name)
{
return Members.GetList<Members>("UserName=@Name", new object[] { name });
}
8、查询出单个的值,值是个Object类型:实体类.ExecSQLObj("数据库名","完整的Sql语句",new Object[]{});
/// <summary>
/// 根据等级ID查询限注值范围
/// </summary>
/// <param name="gradeID"></param>
/// <returns></returns>
public static string GetRegardByID(int gradeID)
{
string sql = "select LimitValue from Regard where GradeID=" + gradeID;
return Convert.ToString(Regard.ExecSQLObj("Casino", sql, new object[] { }));
}
//(1)聚合函数直接返回到实体里面ID,
// (2)GetList<实体>(记录条数,"where条件", new object[] { SaleID, ProjectCode, MaxID(where条件里面的参数) });
public static List<AccountDetails> GetList(int SaleID,string ProjectCode,int MaxID,out int Count)
{
var CountInfo = AccountDetails.GetInfo<AccountDetails>("Count(ID) as ID", "SaleID=@SaleID and ProjectCode=@ProjectCode and ID>@MaxID", new object[] { SaleID, ProjectCode, MaxID });
if (CountInfo != null && CountInfo.ID.HasValue)
{
Count = CountInfo.ID.Value;
}
else
{
Count = 0;
}
return AccountDetails.GetList<AccountDetails>(1000,"SaleID=@SaleID and ProjectCode=@ProjectCode and ID>@MaxID", new object[] { SaleID, ProjectCode, MaxID });
}
9、根据Sql条件直接查询返回DataTable(单个表)和DataTableCollection(多张表),这个最实用
实例1:Members这个实体类与sql里面的涉及的表可以没有关系ExecSQLDataTable("Casino", sql, new object[] { });——Members实体类在这里只不过起了执行sql语句的作用。不用返回Members实体。
/// <summary>
/// 根据ID查询会员信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static DataTable GetMemberById(int id)
{
string sql = "select * from Members where ID=" + id;
return Members.ExecSQLDataTable("Casino", sql, new object[] { });
}
实例2:直接采用ThePart.DataHelper.ORM查询出表的集合,在存储过程里面可以查询多张表DataTable返回值为DataTableCollection,根据第一张表ds[0],第二张表ds[1],就可以
拿出表的值了。
/// <summary>
/// 根据条件查询体育投注记录 2014.05.15
/// </summary>
/// <param name="userName">玩家名称</param>
/// <param name="dateBegin">交易时间起始</param>
/// <param name="dateEnd">交易时间截止</param>
/// <param name="betOrderID">交易单号</param>
/// <param name="pageSize">每页最大记录数</param>
/// <param name="pageIndex">当前页</param>
/// <returns>返回json值</returns>
public static string GetBetRecordsByPage(string userName, string dateBegin, string dateEnd, string betOrderID, int pageSize, int pageIndex)
{
List<IDataParameter> pars = new List<IDataParameter>(){
new SqlParameter("@userName",userName),
new SqlParameter("@dateBegin",dateBegin),
new SqlParameter("@dateEnd",dateEnd),
new SqlParameter("@betOrderID",betOrderID),
new SqlParameter("@pageSize",pageSize),
new SqlParameter("@pageIndex",pageIndex)
};
DataTableCollection ds = ThePart.DataHelper.ORM.ORMBase.ExecProcDataTableCollectionP("Casino", "up_GetBetRecordsByPage", pars);
DataTable data = ds[0];
string jsonData = JsonConvert.SerializeObject(data); //需要用到Newtonsoft.Json.dll这个类库
return jsonData;
}
10、添加实体信息,并返回1或0(影响数据行数)
/// <summary>
/// 添加等级信息
/// </summary>
/// <param name="memberGrade"></param>
/// <returns></returns>
public static int AddMemberGrade(MemberGrade memberGrade)
{
return MemberGrade.Insert<MemberGrade>(memberGrade);
}
11、直接采用存储过程传参数值,执行添加,修改,删除
/// <summary>
/// SportsBetRecords亚洲体育记录更新时间变动后,AccountDetails在原有记录基础上再新添加一条相同父RecordID的记录
/// </summary>
/// <param name="RecordID">原纪录的父ID</param>
/// <param name="RecordType">记录类型,亚洲体育投注记录类型7</param>
/// <param name="W">盈利</param>
/// <param name="T">变动更新时间</param>
/// <param name="B">投注额</param>
/// <returns></returns>
public string AddSportsBetRecord(string RecordID, int RecordType, decimal W, DateTime T, decimal B)
{
List<IDataParameter> paralist = new List<IDataParameter>{
new SqlParameter("@RecordID",RecordID),
new SqlParameter("@RecordType",RecordType),
new SqlParameter("@W",W),
new SqlParameter("@T",T),
new SqlParameter("@B",B),
};
long insertCount = AccountDetails.ExecProcP("UserCenter", "Up_UpAccountDetailsByRecordID", paralist);
return insertCount.ToString();
}
12、更新数据表字段的值: 实体类.Update(整个需要更新的实体实例对象,"where后面的条件字段表达式")
实例1:
public static int Update(W88BetRecords item)
{
return W88BetRecords.Update(item, "Id=" + item.Id.Value + "and TerraceId=2");
}
实例2:string.Formart("",,)格式
/// <summary>
/// 修改会员钱包余额
/// </summary>
/// <param name="blanace"></param>
/// <param name="userID"></param>
/// <param name="walletID"></param>
/// <returns></returns>
public static int DetailMoneyByID(decimal blanace, int userID, int walletID)
{
return MemberMoney.Update<MemberMoney>(new MemberMoney { Balance =
blanace }, string.Format("UserID='{0}' and WalletID={1}", userID,
walletID));
}
ORMBase对象/关系型数据库映射在MVC中的应用(二)的更多相关文章
- ORMBase对象/关系型数据库映射在MVC中的应用
ORM这个字眼在我们操作数据库的时候,是我们使用频率最高的.它到底是个什么东西呢,我们先来看看一些对它的含义解释. 对象/关系数据库映射(object/relational mapping(ORM)) ...
- 对象关系型数据库管理系统(PostgresQL )
PostgresQL是 对象关系型数据库管理系统(ORDBMS).PostgreSQL支持大部分SQL标准并且提供了许多其他现代特性:复杂查询.外键.触发器.视图.事务完整性.MVCC.同样,Po ...
- MVC中定时发布二维码邮件
发布邮件 查看第一个方法就可以了,第二个跟这个无关 using System; using System.Collections.Generic; using System.Linq; using S ...
- SQLite vs MySQL vs PostgreSQL:关系型数据库比较
自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛.面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景 ...
- [置顶] Nosql笔记(一)——关系型数据库回顾
Nosql笔记(一)——关系型数据库回顾 在平常的商业应用中,我们所使用的大多都是关系型数据库,诸如SQL Server. MY SQL. Oracle等. 关于关系型数据库中的关键技术: 存储引擎 ...
- NodeJS旅程 : express - nodejs MVC 中的王牌
express 正如ASP.NET MVC 在作为.net平台下最佳的 Mvc框架的地位一样,express在 node.js 环境也有着相同的重要性.在百度上 "nodejs expres ...
- 关系型数据库 和 非关系型数据对比 以及 MySQL与Oracle对比
一.关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库. 关系模型1970年提出的,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型. 简单来说,关系模型指的 ...
- 关系和非关系型数据库区别(以及oracle和mysql的区别)
一.关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库. 关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐 ...
- 关系型数据库和非关系型数据库区别、oracle与mysql的区别
一.关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库. 关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐 ...
随机推荐
- 用CentOS 7打造合适的科研环境
http://seisman.info/linux-environment-for-seismology-research.html 这篇博文记录了我用CentOS 7搭建地震学科研环境的过程,供我个 ...
- 【转载】Git的安装与使用
Git的安装与使用 转载来源:http://www.cnblogs.com/Bonker/p/3441781.html 1,下载git https://code.google.com/p/msysg ...
- css-实现元素垂直居中对齐
css-实现元素/元素内容,垂直居中对齐 一.单行内容的垂直居中(line-height:行高方法) 只考虑单行是最简单的,无论是否给容器固定高度,只要给容器设置 line-height 和 heig ...
- ASP.NET5/MVC6 下生成Helppage
https://github.com/domaindrivendev/Ahoy 打开nuget包管理器,搜索Swashbuckle 打开Startup.cs文件在ConfigureServices方法 ...
- EF架构~过滤导航属性等,拼接SQL字符串
拼接T-SQL串,并使它具有通用性 好处:与服务器建立一次连接,给服务器发一条SQL命令,即可实现 代码如下: 1 /// <summary> 2 /// 构建Insert语句串 3 // ...
- java多线程总结五:线程池的原理及实现
1.线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创 ...
- iOS 各种控件默认高度
1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置为灰色,黑色或者半 ...
- 12天学好C语言——记录我的C语言学习之路(Day 6)
12天学好C语言--记录我的C语言学习之路 Day 6: 今天,我们要开始学习数组了. //①数组部分,数组的大小不能够动态定义.如下: //int n; scanf("%d,& ...
- MVC3中 swfupload 按钮不显示 解决方案
这两天在做图片上传并显示的功能,之前就用过swfupload,觉得很不错,之前是用asp.net webform做的,这次的项目是用asp.net MVC3来做,视图引擎用的是Razor. 将js文件 ...
- 学习C++ Primer 的个人理解(七)
类,后面还有两章是介绍有关于类的内容的.这一张依然只是个概括.但也已经将大致用法介绍完了. 重点如下: 1.成员函数的声明,必须在类的内部. 2.引用const成员函数 我们知道成员函数中有一个名为t ...