微软企业库5.0 调用 MySql 分页存储过程

1.需要完成两个前置条件后才可以使用 微软企业库5.0 调用 MySql 存储过程

微软企业库5.0 支持 MySql

MySql 分页存储过程

2.需要添加一个继承 IParameterMapper 接口的类分配查询参数

using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Grass.Extend;

namespace Grass.MySqlDal
{
  /// <summary>
  /// 分配查询参数
  /// </summary>
  public class MyDbParameterMapper : IParameterMapper
  {
    /// <summary>
    /// 实例化参数分配类实例
    /// </summary>
    /// <param name="pars">参数名数组</param>
    public MyDbParameterMapper(params IDataParameter[] pars)
    {
      m_pars = pars;
    }

    private IDataParameter[] m_pars = null;
    public DbCommand Cmd { set; get; }
    /// <summary>
    /// 分配查询参数
    /// </summary>
    /// <param name="command">查询命令对象</param>
    /// <param name="parameterValues">参数对象</param>
    public void AssignParameters(DbCommand command, object[] parameterValues)
    {
      Cmd = command;
      if (!parameterValues.IsNullOrDbNull() && parameterValues.Length>0)
        m_pars = parameterValues as IDataParameter[];

      if (m_pars == null)
        return;
      //输入参数
      if(!m_pars.IsNullOrDbNull())
        command.Parameters.AddRange(m_pars);
    }
  }
}

3.执行分页存储过程

    [TestMethod]
    public void TestExecStoreProcedure()
    {
      #region 输入参数
      List<MySqlParameter> parameters = new List<MySqlParameter>();
      //查询列
      parameters.Add(new MySqlParameter
      {
        MySqlDbType = MySqlDbType.VarChar,
        ParameterName = @"_fields",
        Value = "order_no,order_date,order_type",
        Size = 2000
      });
      //查询表
      parameters.Add(new MySqlParameter
        {
          MySqlDbType  = MySqlDbType.Text,
          ParameterName = "_tables",
          Value = "`order`",
          Size = 0
        });
      //查询条件
      parameters.Add(new MySqlParameter
      {
        MySqlDbType = MySqlDbType.VarChar,
        ParameterName = "_where",
        Value = "1=1",
        Size = 2000
      });
      //排序规则
      parameters.Add(new MySqlParameter
      {
        MySqlDbType = MySqlDbType.VarChar,
        ParameterName = "_orderby",
        Value = "order_no asc",
        Size = 200
      });
      //查询页码
      parameters.Add(new MySqlParameter
      {
        MySqlDbType = MySqlDbType.Int32,
        ParameterName = "_pageindex",
        Value = 1,
        Size = 8
      });
      //每页记录数
      parameters.Add(new MySqlParameter
      {
        MySqlDbType = MySqlDbType.Int32,
        ParameterName = "_pagesize",
        Value = 5,
        Size = 8
      });
      //求和字段,使用逗号分隔
      parameters.Add(new MySqlParameter
      {
        MySqlDbType = MySqlDbType.VarChar,
        ParameterName = "_sumfields",
        Value = "order_no,order_no,order_no",
        Size = 200
      });
      #endregion

      #region 输出参数
      //总记录数
      parameters.Add(new MySqlParameter
      {
        MySqlDbType = MySqlDbType.Int32,
        ParameterName = "_totalcount",
        Value = 0,
        Direction = ParameterDirection.Output,
        Size = 8
      });
      //总页数
      parameters.Add(new MySqlParameter
      {
        MySqlDbType = MySqlDbType.Int32,
        ParameterName = "_pagecount",
        Value = 0,
        Direction = ParameterDirection.Output,
        Size = 8
      });
      //求和结构,值之间使用逗号分隔
      parameters.Add(new MySqlParameter
      {
        MySqlDbType = MySqlDbType.VarChar,
        ParameterName = "_sumResult",
        Value = 0,
        Direction = ParameterDirection.Output,
        Size = 2000
      });
      #endregion
      //定义查询参数
      MyDbParameterMapper param = new MyDbParameterMapper(parameters.ToArray());
      //执行存储过程
      OrderDal dal = new OrderDal();//即 MySqlDatabase 对象的封装
      //其中 DbBase = (Database)MySqlDatabase;
      var accessor = dal.DbBase.CreateSprocAccessor<OrderModel>("sp_MvcCommonDataSource", param);
      IList<OrderModel> pinfo = new List<OrderModel>(accessor.Execute());
      //获取输出参数
      object totalcount = param.Cmd.Parameters["_totalcount"].Value;
      object pagecount = param.Cmd.Parameters["_pagecount"].Value;
      object sumResult = param.Cmd.Parameters["_sumResult"].Value;

      Assert.IsNotNull(pinfo);
    }
</pre><pre>

微软企业库5.0 调用 MySql 分页存储过程

时间: 2024-10-13 04:00:20

微软企业库5.0 调用 MySql 分页存储过程的相关文章

微软企业库5.0 支持 MySql

三步让 企业库支持 mysql 数据库 1.创建 MySqlDatabaseData 类 using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ContainerModel; using Microsoft.Practices.EnterpriseLibrary.Data; using Mi

微软企业库5.0学习笔记(10)ASP.NET模块依赖注入

您可以使用HTTP模块,一个到ASP.NET HttpApplicationState类的扩展,在Global.asax编写代码强制ASP.NET在每一个页面请求时自动注入依赖的对象,就像在ASP.NET Web窗体应用程序中讨论的一样. 下列方法显示了一个合适的方法能够获取PreRequestHandlerExecute事件将它自己注入到ASP.NET的执行流水线,在每个页面请求中通过容器的BuildUp方法运行Http模块,并获取OnPageInitComplete事件.当OnPageIni

调用MySql 分页存储过程带有输入输出参数

1 Create PROCEDURE getuser 2 ( 3 IN pageIndex INT, 4 IN pageSize INT, 5 OUT count INT 6 ) 7 8 BEGIN 9 declare pindex int DEFAULT (pageIndex-1)*pageSize; 10 11 select * from lc_user order by id LImit pindex,pageSize; 12 13 SELECT COUNT(id) INTO count

微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART3——内置Call Handler介绍

在前面的Part1和Part2中 我已经介绍了PolicyInjection模块的内置的Matching Rule和自定义Matching Rule的基本信息及配置使用方法,不过光有Matching Rule进行验证匹配还不够,还必须要有相应的操作——Call Handler,所以今天继续介绍PolicyInjection模块内置的Call Handler. 一.PolicyInjection模块内置的Call Handler 通过将Call Handler和Part1.Part2中 的Matc

微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART1——为什么要使用Unity? (转)

http://www.cnblogs.com/kyo-yo/archive/2010/11/01/Learning-EntLib-Tenth-Decoupling-Your-System-Using-The-Unity-PART1-Why-Use-Unity.html

微软企业库研究之日志模块

很久之前研究微软的企业库时候写的,要注意需要引用Microsoft.Practices.EnterpriseLibrary.Logging组件库,因为ASP.NET5出来,微软在.netframework中自带了Logger,所以应该以后也不会用上. using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.T

在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreSQL.IBM DB2.或者国产达梦数据库等等,这些数据库的共同特点是关系型数据库,基本上开发的模型都差不多,不过如果我们基于ADO.NET的基础上进行开发的话,那么各种数据库都有自己不同的数据库操作对象,微软企业库Enterprise Library是基于这些不同数据库的操作做的抽象模型,适合多数据

微软企业库6 Data Access Application Block 扩展

虽然标题是对6的扩展,其实对于4.5同样适用,因为企业库在这几个版本中没太大变化 该扩展主要针对DataAccessor<T>,该类在创建时要传递几种接口:IParameterMapper,IRowMapper<T>,IResultSetMapper<T>,其中IRowMapper<T>企业库提供了MapBuilder<T>静态类来辅助创建相应的对应关系,但对于IParameterMapper和IResultSetMapper<T>没

微软企业库的Cache

微软企业库的Cache 通常,应用程序可以将那些频繁访问的数据,以及那些需要大量处理时间来创建的数据存储在内存中,从而提高性能.基于微软的企业库,我们的快速创建一个缓存的实现. 新建PrismSample.Infrastructure.Cache 新建一个类库项目,将其命名为PrismSample.Infrastructure.Cache,然后从nuget中下载微软企业库的Cache. 然后新建我们的CacheManager类: using Microsoft.Practices.Enterpr