Dapper.NET使用入门(四)【用Dapper数据访问层封装】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WuLex/article/details/52527024

每天都是一个起点,每天都有一点进步,每天都有一点收获!

Program.cs主程序:

 internal class Program
    {
        private static void Main(string[] args)
        {
            InitSqlMaker.InitSqlMakerO();

            //构建查询语句之一(全连接)
            SelectSqlMaker selectSqlMaker=new SelectSqlMaker();
            selectSqlMaker.FullJoinSelectTest();

            //构建删除语句之一(条件删除)
            DeleteSqlMaker.WhereDeleteTest();

            CustomerBLL bll=new CustomerBLL();
            List<Customer> list=bll.GetBy().ToList();
            Console.WriteLine(list.Count+"条记录:"+list[0].Name + "---" + list[0].Address);

            List<Customer> listmuch = bll.GetCustomersBystorage().ToList();
            Console.WriteLine(listmuch.Count + "条记录!" );
            Console.ReadKey();
        }
    }

表现

 public static class Performance
    {
        public static void SetUp()
        {
            QueryMaker.DbScheme = "dbo";
        }

        public static void FullSelectForCustomerTime()
        {
            int cnt = 1000000;
            string sql = null;
            var stopwatch = System.Diagnostics.Stopwatch.StartNew();
            for (int i = 0; i < cnt; i++)
            {
                sql = QueryMaker.New()
                    .SELECT()
                    .Col("Id", "Id")
                    .Col("Name", "Name")
                    .Col("Description", "Desc")
                    .Col("Address", "Addr")
                    .Col("Zip", "Zip")
                    .Col("Balance", "Balance")
                    .Col("Registered", "Reg")
                    .FROM().Tab("Customer")
                    .WHERE("Zip = @zip")
                    .ORDERBY("Name", SortAs.Asc)
                    .RawSql();
            }
            stopwatch.Stop();
            //var example = "SELECT\n\tId AS Id\n\t, Name AS Name"  + "\n\t, Description AS Desc\n\t, Address AS Addr\n\t, Zip AS Zip"  + "\n\t, Balance AS Balance\n\t, Registered AS Reg" + "\nFROM\n\t[dbo].[Customer]"  + "\nWHERE\n\tZip = @zip\nORDER BY Name ASC;";
                      System.Diagnostics.Trace.WriteLine(stopwatch.Elapsed.TotalMilliseconds.ToString("Total 0.00 ms"));
            System.Diagnostics.Trace.WriteLine( ((double) (stopwatch.Elapsed.TotalMilliseconds*1000)/cnt).ToString("0.00 us per one query"));
        }
    }

初始化语句构建器

 public static class InitSqlMaker
    {
        public static void InitSqlMakerO()
        {
            var current = QueryMaker.Current;
            Console.WriteLine("current ISqlMaker:" + (current is ISqlMaker));
            var maker = QueryMaker.New();
            Console.WriteLine("maker ISqlMaker:" + (maker is ISqlMaker));
            Console.WriteLine("maker ISqlFirst:" + (maker is ISqlFirst));
            Console.WriteLine("maker.Equals(current):" + (maker.Equals(current)));
        }

        public static void MakeEmptyQuery()
        {
            var newQuery = QueryMaker.Current;
            try
            {
                newQuery.RawSql();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }

Select语句构建

 public  class SelectSqlMaker
    {
        private string _dbScheme;

        public void SetUp()
        {
            _dbScheme = "dbo"; // 默认MSSQL 架构 
        }

        public void InitSelectDistinctTest()
        {
            var maker = QueryMaker.New(_dbScheme) .SelectDistinct("Name, Description, Address");
            var sql = maker.RawSql();
            // var example = "SELECT DISTINCT\n\tName\n\t, Description\n\t, Address;";
        }

        public void SelectUnionTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .UNION();
            var sql = maker.RawSql();
            var example = "SELECT\nUNION\nSELECT;";

            maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id")
                .UNION(IsALL: true)
                .Col("Id");
            sql = maker.RawSql();
            example = "SELECT\n\tId\nUNION ALL\nSELECT\n\tId;";
        }

        public void InitSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT("Name, t.Description, t.Address AS adr");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tName\n\t, t.Description\n\t, t.Address AS adr;";
        }

        public void AddColSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT("Id")
                .Col("Name")
                .Col("Description", "Desc")
                .Col("t.Address", "Addr");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId\n\t, Name\n\t, Description AS Desc\n\t, t.Address AS Addr;";
        }

        public void FromSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT("Id")
                .Col("Name")
                .Col("Description", "Desc")
                .Col("t.Address", "Addr")
                .FROM("table, dbo.table, [dbo].[Customer] cst");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId\n\t, Name\n\t, Description AS Desc\n\t, t.Address AS Addr\nFROM"  + "\n\ttable\n\t, dbo.table\n\t, [dbo].[Customer] cst;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void EmptySchemeSelectTest()
        {
            var maker = QueryMaker.New()
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer");
            var sql = maker.RawSql();
            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[Customer];";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void AddTableSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Table")
                .Tab("Table", "Tab")
                .Tab("Table", "Tab", "tbl");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Table]\n\t, [dbo].[Table] AS Tab\n\t, [tbl].[Table] AS Tab;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void WhereSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer")
                .WHERE("Zip = @zip AND Id >= @id");
            var sql = maker.RawSql();
            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nWHERE\n\tZip = @zip AND Id >= @id;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void WhereAndSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer")
                .WHERE("Zip = @zip")
                .WhereAnd("Id >= @id");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId AS Id\nFROM"  + "\n\t[dbo].[Customer]\nWHERE\n\tZip = @zip\n\tAND Id >= @id;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void WhereOrSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer")
                .WHERE("Zip = @zip")
                .WhereOr("Id >= @id");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nWHERE\n\tZip = @zip\n\tOR Id >= @id;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void JoinSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer")
                .JOIN("Address", "addr");
            var sql = maker.RawSql();
            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nINNER JOIN [dbo].[Address] AS addr;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void LeftJoinSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer")
                .LeftJoin("Address", "addr");
            var sql = maker.RawSql();
            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nLEFT JOIN [dbo].[Address] AS addr;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void RightJoinSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer")
                .RightJoin("Address", "addr");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nRIGHT JOIN [dbo].[Address] AS addr;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void FullJoinSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer")
                .FullJoin("Address", "addr");
            var sql = maker.RawSql();
            Console.WriteLine(sql);
            Console.WriteLine("-------------------------------------------------------");
            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nFULL JOIN [dbo].[Address] AS addr;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void OnJoinSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer", "cst")
                .JOIN("Address", "addr")
                .ON("cst.Id = addr.Id");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId AS Id\nFROM"  + "\n\t[dbo].[Customer] AS cst" + "\nINNER JOIN [dbo].[Address] AS addr" + "\n\tON cst.Id = addr.Id;";
        }

        public void OnAndJoinSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer", "cst")
                .JOIN("Address", "addr")
                .ON("cst.Id = addr.Id")
                .OnAnd("cst.Col = addr.Col");
            var sql = maker.RawSql();
            var example = "SELECT\n\tId AS Id\nFROM"
                          + "\n\t[dbo].[Customer] AS cst"
                          + "\nINNER JOIN [dbo].[Address] AS addr"
                          + "\n\tON cst.Id = addr.Id"
                          + "\n\tAND cst.Col = addr.Col;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void OnOrJoinSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer", "cst")
                .JOIN("Address", "addr")
                .ON("cst.Id = addr.Id")
                .OnOr("cst.Col = addr.Col");
            var sql = maker.RawSql();
            var example = "SELECT\n\tId AS Id\nFROM"
                          + "\n\t[dbo].[Customer] AS cst"
                          + "\nINNER JOIN [dbo].[Address] AS addr"
                          + "\n\tON cst.Id = addr.Id"
                          + "\n\tOR cst.Col = addr.Col;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void OrderBySelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer", "cst")
                .ORDERBY("Id", SortAs.Desc);
            var sql = maker.RawSql();
            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nORDER BY Id DESC;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void OrderThenSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer", "cst")
                .ORDERBY("Id", SortAs.Desc)
                .OrderThen("Zip", SortAs.Asc);
            var sql = maker.RawSql();
            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nORDER BY Id DESC, Zip ASC;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void GroupBySelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer", "cst")
                .GROUPBY("Id");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nGROUP BY Id;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void GroupThenSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer", "cst")
                .GROUPBY("Id")
                .GroupThen("Zip");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId AS Id\nFROM"  + "\n\t[dbo].[Customer] AS cst" + "\nGROUP BY Id, Zip;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }

        public void HavingSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer")
                .GROUPBY("Zip")
                .HAVING("COUNT(Id) >= @id");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nGROUP BY Zip"  + "\nHAVING COUNT(Id) >= @id;";
        }

        public void HavingAndSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer")
                .GROUPBY("Zip")
                .HAVING("COUNT(Id) >= @id")
                .HavingAnd("MIN(Zip) = @zip");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nGROUP BY Zip"  + "\nHAVING COUNT(Id) >= @id\n\tAND MIN(Zip) = @zip;";
        }

        public void HavingOrSelectTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .SELECT()
                .Col("Id", "Id")
                .FROM()
                .Tab("Customer")
                .GROUPBY("Zip")
                .HAVING("COUNT(Id) >= @id")
                .HavingOr("MIN(Zip) = @zip");
            var sql = maker.RawSql();
            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nGROUP BY Zip" + "\nHAVING COUNT(Id) >= @id\n\tOR MIN(Zip) = @zip;";
        }
    }

Insert语句构建

 public static class InsertSqlMaker
    {
        private static string _dbScheme;

        public static void SetUp()
        {
            _dbScheme = "dbo"; // 默认MSSQL 架构 
        }

        public static void InitInsert()
        {
            var maker = QueryMaker.New(_dbScheme).INSERT("Customer");
            var sql = maker.RawSql();
            //var example = "INSERT INTO [dbo].[Customer]";
        }


        public static void AddColumnTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .INSERT("Customer")
                .Col("Name")
                .Col("Description")
                .Col("Address");
            var sql = maker.RawSql();
            //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t)";
        }

        public static void ValuesTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .INSERT("Customer")
                .Col("Name")
                .Col("Description")
                .Col("Address")
                .VALUES("@name, @description, @address");
            var sql = maker.RawSql();
            //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t)\n\tVALUES (\n\t\t@name\n\t\t, @description\n\t\t, @address\n\t);";
        }

        public static void AddValueTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .INSERT("Customer")
                .Col("Name")
                .Col("Description")
                .Col("Address")
                .Col("Zip")
                .VALUES("@name, @description, @address").Param("zip");
            var sql = maker.RawSql();
            //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t\t, [Zip]\n\t)\n\tVALUES (\n\t\t@name\n\t\t, @description\n\t\t, @address\n\t\t, @zip\n\t);";
        }

        public static void JustAddValueTest()
        {
            var maker = QueryMaker.New(_dbScheme)
                .INSERT("Customer")
                .Col("Name")
                .Col("Description")
                .Col("Address")
                .Col("Zip")
                .VALUES()
                .Param("@name")
                .Param("description")
                .Param("@address")
                .Param("zip");
            var sql = maker.RawSql();
            //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t\t, [Zip]\n\t)\n\tVALUES (\n\t\t@name\n\t\t, @description\n\t\t, @address\n\t\t, @zip\n\t);";
        }
    }

Delete语句构建

 public static class DeleteSqlMaker
    {
        public static void SetUp()
        {
            QueryMaker.DbScheme = "dbo";
        }

        public static void InitDeleteTest()
        {
            var maker = QueryMaker.New().DELETE("Customer");
            var sql = maker.RawSql();
            var example = "DELETE FROM [dbo].[Customer];";
        }

        public static string WhereDeleteTest()
        {
            var maker = QueryMaker.New().DELETE("Customer").WHERE("Zip = @zip AND Id >= @id");
            var sql = maker.RawSql();
            //var example = "DELETE FROM [dbo].[Customer]" + "\nWHERE Zip = @zip AND Id >= @id;";
            Console.WriteLine(sql); 
            Console.WriteLine("-------------------------------------------------------");
            return sql;
        }

        public static string WhereAndDeleteTest()
        {
            var maker = QueryMaker.New().DELETE("Customer").WHERE("Zip = @zip").WhereAnd("Id >= @id");
            var sql = maker.RawSql();
            //var example = "DELETE FROM [dbo].[Customer]" + "\nWHERE Zip = @zip\n\tAND Id >= @id;";
            Console.WriteLine(sql);
            return sql;
        }


        public static string WhereOrDeleteTest()
        {
            var maker = QueryMaker.New()
                .DELETE("Customer")
                .WHERE("Zip = @zip")
                .WhereOr("Id >= @id");
            var sql = maker.RawSql();
            //var example = "DELETE FROM [dbo].[Customer]" + "\nWHERE Zip = @zip\n\tOR Id >= @id;";
            return sql;
        }
    }

Update语句构建

 public class UpdateSqlMaker
    {
        public void SetUp()
        {
            QueryMaker.DbScheme = "dbo";
        }
        public void InitUpdateTest()
        {
            var maker = QueryMaker.New()
                .UPDATE("Customer");
            var sql = maker.RawSql();
            //var example = "UPDATE [dbo].[Customer];";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }
        public void SetUpdateTest()
        {
            var maker = QueryMaker.New()
                .UPDATE("Customer")
                .SET("Id = @id, Name = @name");
            var sql = maker.RawSql();
            //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }
        public void ValueSetUpdateTest()
        {
            var maker = QueryMaker.New()
                .UPDATE("Customer")
                .SET()
                    .Val("Id", "id")
                    .Val("Name", "name");
            var sql = maker.RawSql();
            //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name;";
        }
        public void WhereUpdateTest()
        {
            var maker = QueryMaker.New()
                .UPDATE("Customer")
                .SET("Id = @id")
                    .Val("Name", "name")
                .WHERE("Zip = @zip AND Id >= @id");
            var sql = maker.RawSql();
            //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name" + "\nWHERE Zip = @zip AND Id >= @id;";
        }
        public void WhereAndUpdateTest()
        {
            var maker = QueryMaker.New()
                .UPDATE("Customer")
                .SET("Id = @id")
                    .Val("Name", "name")
                .WHERE("Zip = @zip")
                .WhereAnd("Id >= @id");
            var sql = maker.RawSql();
            //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name" + "\nWHERE Zip = @zip\n\tAND Id >= @id;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }
        public void WhereOrUpdateTest()
        {
            var maker = QueryMaker.New()
                .UPDATE("Customer")
                .SET("Id = @id")
                    .Val("Name", "name")
                .WHERE("Zip = @zip")
                .WhereOr("Id >= @id");
            var sql = maker.RawSql();
            //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name"  + "\nWHERE Zip = @zip\n\tOR Id >= @id;";
            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);
        }
    }

Customer业务逻辑层

  class CustomerBLL
    {
        public static IDapperContext context = new DapperContext();
        public static IFactoryRepository repoFactory = new FactoryRepository();
        public static IUnitOfWork unitOfWork = new UnitOfWork(context, repoFactory);
        public  static Container container=new Container();
        public CustomerBLL()
        {
            //container.Register<IDapperContext, DapperContext>();
            //container.Register<IFactoryRepository, FactoryRepository>();
            //container.Register<IUnitOfWork, UnitOfWork>();
        }
        public IEnumerable<Customer> GetBy()
        {
            IRepository<Customer, CustomerEnum> repo = unitOfWork.GetRepository<Customer, CustomerEnum>();

            //如果你没有为数据库实体任何额外的查询或存储过程,你可以使用的空枚举
            //var userRepo = unitOfWork.GetRepository<User, EmptyEnum>();


            IEnumerable<Customer> customers = repo.GetBy(
                    where: new { Zip = "12345", Registered = new DateTime(year: 2013, month: 7, day: 7) },
                    order: new { Registered = SortAs.Desc, Name = SortAs.Asc } );

            return customers;
        }

        //通过存储过程获取数据
        public IEnumerable<Customer> GetCustomersBystorage()
        {
            IRepository<Customer, CustomerEnum> repo = unitOfWork.GetRepository<Customer, CustomerEnum>();
            // Executing stored procedure
            var param = new DynamicParameters();
            param.Add("@startIndex", 10);
            param.Add("@endIndex", 20);
            param.Add("@count", dbType: DbType.Int32, direction: ParameterDirection.Output);
            //字符串返回输出参数
            //param.Add("@errorMsg", dbType: DbType.String, size: 4000, direction: ParameterDirection.ReturnValue);
            IEnumerable<Customer> customers = repo.Exec<Customer>(CustomerEnum.GetCustomerByPage, param);
            int count = param.Get<int>("@count");
            return customers;
        }

    }

DapperDAL程序集下载地址

点击

app.config内容:

<?xml version="1.0" encoding="utf-8"?>

<configuration>

    <connectionStrings>
      <add name="DapperDal" providerName="System.Data.sqlclient" connectionString="Data Source=.\SQLINSTANCE;Initial Catalog=DapperDalDb;Persist Security Info=True;User ID=sa;Password=123456"/>
    </connectionStrings>
    <appSettings>
      <add key="UsedConnectionString" value="DapperDal"/>
      <add key="UseMiniProfilerForSql" value="true"/>
      <add key="SqlCommandTimeOut" value="15"/>
    </appSettings>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

SQL脚本:

USE [DapperDalDb]
GO 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Customer](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](64) NOT NULL,
    [Description] [nvarchar](512) NULL,
    [Address] [nvarchar](128) NULL,
    [Zip] [nvarchar](5) NULL,
    [Balance] [decimal](15, 2) NULL,
    [Registered] [datetime] NULL,
 CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  StoredProcedure [dbo].[spCustomerListByPageGet]    Script Date: 05/31/2013 00:23:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[spCustomerListByPageGet](@startIndex INT, @endIndex INT, @count INT OUT)
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @tab TABLE (Id INT)

    SET @Count = (
            SELECT COUNT(Id)
            FROM   dbo.Customer
        );

    WITH CustomerCTE(Id, RowNumber) AS 
    (
        SELECT c.Id AS Id,
               ROW_NUMBER() OVER(ORDER BY c.Registered DESC, c.Id) AS 'RowNumber'
        FROM   dbo.Customer c
    )
    INSERT INTO @tab
    SELECT Id
    FROM   CustomerCTE
    WHERE  RowNumber BETWEEN @startIndex AND @endIndex      

    SELECT c.[Id]
      ,c.[Name]
      ,c.[Description]
      ,c.[Address]
      ,c.[Zip]
      ,c.[Balance]
      ,c.[Registered]
    FROM   dbo.Customer      c,
           @tab subTable
    WHERE  c.Id = subTable.Id
END
GO

运行结果如图:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/WuLex/article/details/52527024