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、直接返回所有List表记录:不需要查询条件和写sql语句。  实体类.GetList<实体类>(0)

  public static List<BetResultInfo> BetRInfo()
        {
            return BetResultInfo.GetList<BetResultInfo>(0);
        }

 

  5、更新数据表字段的值: 实体类.Update(实体的实例对象,"需要修改的字段值")

  public static int Update(W88BetRecords item)
        {
            return W88BetRecords.Update(item, "Id=" + item.Id.Value + "and TerraceId=2");
        }

  6、查询出单个的值,值是个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[] { }));
        }

 

 

 

 

ORMBase对象/关系型数据库映射在MVC中的应用(二),古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。