微软企业库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 分页存储过程)