首页 > 技术文章 > C# MySql分页存储过程的应用

weixing 2013-08-08 15:04 原文

存储过程:

获取范围内的数据

 

DELIMITER $$ 


DROP PROCEDURE IF EXISTS `studb`.`GetRecordAsPage` $$


CREATE PROCEDURE `studb`.`GetRecordAsPage` (in tbName varchar(800),in fldName varchar(1000),


in strWhere varchar(500),in pageIndex int,in pageSize int,in orderType int,in sortName varchar(50))


BEGIN


declare startRow int;


declare sqlStr varchar(1000);


declare limitTemp varchar(1000);


declare orderTemp varchar(1000); 


set startRow = (pageIndex-1)*pageSize; 


set sqlStr = CONCAT('SELECT ',fldName,' from ',tbName);


set limitTemp = CONCAT(' limit ',startRow,',',pageSize);


set orderTemp = CONCAT(' order by ',sortName);


if orderType = 0 then


set orderTemp = CONCAT(orderTemp,' ASC ');


else


set orderTemp = CONCAT(orderTemp,' DESC ');


end if; 


set @sqlString = CONCAT(sqlStr,' ',strWhere,orderTemp,limitTemp); 


prepare sqlstmt from @sqlString;


execute sqlstmt;


deallocate prepare sqlstmt; 


END $$ 


DELIMITER ;
View Code

获取条件下的总记录数据

 

DELIMITER $$


DROP PROCEDURE IF EXISTS `GetRecordCount` $$


-- --CREATE DEFINER=`root`@`localhost` PROCEDURE `GetRecordCount`(in tbName varchar(800),in strWhere varchar(500))

CREATE  PROCEDURE `GetRecordCount`(in tbName varchar(800),in strWhere varchar(500))


BEGIN


set @strSQL=concat('select count(*) as countStr from ',tbName,strWhere);


prepare sqlstmt from @strSQL;


execute sqlstmt;


deallocate prepare sqlstmt;


END $$


DELIMITER ;
View Code

测试

建表语句

CREATE TABLE `uinfo` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`iduse` varchar(200) DEFAULT NULL COMMENT '用户编号',
`uname` varchar(200) DEFAULT NULL COMMENT '用户名称',
`email` varchar(200) DEFAULT NULL COMMENT 'Email',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
View Code

测试脚本

SELECT
`id`
, `iduse`
, `uname`
, `email`
FROM
`mostimpressive_dscj`.`uinfo`;

SET @tbName='uinfo'; -- -- 表名
SET @fldName='iduse,uname,email';-- -- 表的列名
SET @strWhere = ''; -- -- 查询条件
SET @pageIndex=1;-- -- 第几页 传入1就是显示第一页
SET @pageSize=5;-- -- 一页显示几条记录
SET @orderType=0; -- --0是升序 非0是降序
SET @sortName='id'; -- -- 排序字段

CALL Dscj_GetPaged('uinfo','iduse,uname,email','',1,1,1,'id')
-- --SELECT iduse,uname,email from uinfo order by id ASC limit 0,4

-- --传入表名,返回总的记录条数
CALL GetRecordCount('uinfo','')
View Code

C#程序

 

protected void get_data()
 
    {
 
        string strWhere = " where idmde='" + DropDownList1.SelectedValue + "' and idmke='" + DropDownList2.SelectedValue + "'";
 
        string fldName = "iduse,uname,email,euser,werks"; 

        int pageSize = 5;
 
        int pageCount = 1;
 
        int pageCountMod = 0;
 
        int doCount = 0;
 
        int pageIndex = System.Convert.ToInt32(pageIndexLab.Text.ToString());
 
 
 
        myco = new MySqlConnection(strconn);
 
        myco.Open();
 
        mycomm = new MySqlCommand("GetRecordCount", myco);
 
        mycomm.CommandType = CommandType.StoredProcedure;
 
 
 
        MySqlParameter[] para = new MySqlParameter[]{
 
            new MySqlParameter("@tbName",MySqlDbType.VarChar,20),
 
            new MySqlParameter("@strWhere",MySqlDbType.VarChar,500)};
 
        para[0].Value = "uinfo";
 
        para[1].Value = strWhere;
 
        mycomm.Parameters.AddRange(para);
 
 
 
        MySqlDataReader mydr=mycomm.ExecuteReader();
 
        while(mydr.Read()){
 
            pageCount = System.Convert.ToInt32(mydr["countStr"].ToString()) ;
 
            pageCountMod = pageCount % pageSize;
 
            pageCount= pageCount/ pageSize;
 
            if (pageCount == 0)
 
            {
 
                //pageCount++;
 
            }
 
            else
 
            {
 
                if (pageCountMod != 0)
 
                {
 
                    pageCount++;
 
                }
 
            }
 
            pageCountLab.Text = pageCount.ToString();
 
        }
 
 
 
        if (pageIndex == 0)
 
        {
 
            pageIndex++;
 
        }
 
       

        mydr.Close();
 
        mycomm.Dispose();
 
 
 
        mycomm = new MySqlCommand("GetRecordAsPage", myco);
 
        mycomm.CommandType = CommandType.StoredProcedure;
 
 
 
        para.Initialize();
 
        para = new MySqlParameter[]{
 
            new MySqlParameter("@tbName",MySqlDbType.VarChar,20),
 
            new MySqlParameter("@fldName",MySqlDbType.VarChar,1000),
 
            new MySqlParameter("@strWhere",MySqlDbType.VarChar,500),
 
            new MySqlParameter("@pageIndex",MySqlDbType.Int32),
 
            new MySqlParameter("@pageSize",MySqlDbType.Int32),
 
            new MySqlParameter("@orderType",MySqlDbType.Int16),
 
            new MySqlParameter("@sortName",MySqlDbType.VarChar,50)};
 
 
 
        para[0].Value = "uinfo";
 
        para[1].Value = fldName;
 
        para[2].Value = strWhere;
 
        para[3].Value = pageIndex;
 
        para[4].Value = pageSize;
 
        para[5].Value = 0;
 
        para[6].Value = "iduse";
 
 
 
        mycomm.Parameters.AddRange(para);
 
 
 
        MySqlDataAdapter myAdapter = new MySqlDataAdapter(mycomm);
 
       

 
 
        DataSet myDataSet = new DataSet();
 
        DataView m_DataView = new DataView();
 
 
 
        myAdapter.Fill(myDataSet);
 
        m_DataView = myDataSet.Tables[0].DefaultView;
 
 
 
        GridView1.DataSource = m_DataView;
 
        GridView1.DataBind();
 
 
 
        GridView2.DataSource = m_DataView;
 
        GridView2.DataBind();
 
 
 
        GridView3.DataSource = m_DataView;
 
        GridView3.DataBind();
 
 
 
        DropDownpage.Items.Clear();
 
 
 
        if (pageCount != 0)
 
        {
 
            doCount = 0;
 
            while (doCount < pageCount)
 
            {
 
                doCount++;
 
                DropDownpage.Items.Add(new ListItem(doCount.ToString()+"", doCount.ToString()));
 
            }
 
        }
 
        if (pageIndex == 1)
 
        {           

            Button_IndexFirst.Enabled = false;
 
            Button_IndexPrevious.Enabled = false;
 
            Button_IndexNext.Enabled = true;
 
            Button_IndexLast.Enabled = true;
 
           

        }
 
        else if (pageIndex == pageCount)
 
        {
 
            Button_IndexFirst.Enabled = true;
 
            Button_IndexPrevious.Enabled = true;
 
            Button_IndexNext.Enabled = false;
 
            Button_IndexLast.Enabled = false;
 
           

        }
 
        else
 
        {
 
            Button_IndexFirst.Enabled = true;
 
            Button_IndexPrevious.Enabled = true;
 
            Button_IndexNext.Enabled = true;
 
            Button_IndexLast.Enabled = true;
 
           

        }
 
 
 
        if (pageCount == 0 || pageCount == 1)
 
        {
 
            pageIndex = pageCount;
 
            Button_IndexFirst.Enabled = false;
 
            Button_IndexPrevious.Enabled = false;
 
            Button_IndexNext.Enabled = false;
 
            Button_IndexLast.Enabled = false;
 
            DropDownpage.Enabled = false;
 
        }
 
        else
 
        {
 
            DropDownpage.Enabled = true;
 
        }
 
 
 
        pageIndexLab.Text = pageIndex.ToString();
 
 
 
        if (pageIndex != 0)
 
        {
 
            DropDownpage.SelectedItem.Selected = false;
 
            DropDownpage.Items.FindByValue(pageIndex.ToString()).Selected = true;
 
        }
 
       

 
 
        myco.Close();
 
    }
 
 
 
 
 
    protected void Button_IndexFirst_Click(object sender, EventArgs e)
 
    {
 
        pageIndexLab.Text = "1";
 
        if (pageCountLab.Text.Equals("0"))
 
        {
 
            pageIndexLab.Text = "0";
 
        }
 
        get_data();
 
    }
 
    protected void Button_IndexPrevious_Click(object sender, EventArgs e)
 
    {
 
        int pageIndex = System.Convert.ToInt32(pageIndexLab.Text.ToString());
 
        pageIndex--;
 
        if (pageIndex < 0)
 
        {
 
            pageIndex = 0;
 
        }
 
        pageIndexLab.Text = pageIndex.ToString();
 
        get_data();
 
    }
 
    protected void Button_IndexNext_Click(object sender, EventArgs e)
 
    {
 
        int pageIndex = System.Convert.ToInt32(pageIndexLab.Text.ToString());
 
        int pageCount = System.Convert.ToInt32(pageCountLab.Text.ToString());
 
        pageIndex++;
 
        if (pageIndex > pageCount)
 
        {
 
            pageIndex = pageCount;
 
        }
 
        pageIndexLab.Text = pageIndex.ToString();
 
        get_data();
 
    }
 
    protected void Button_IndexLast_Click(object sender, EventArgs e)
 
    {
 
        int pageIndex = System.Convert.ToInt32(pageIndexLab.Text.ToString());
 
        int pageCount = System.Convert.ToInt32(pageCountLab.Text.ToString());
 
        pageIndex = pageCount;
 
        pageIndexLab.Text = pageIndex.ToString();
 
        get_data();
 
    }
 
    protected void DropDownpage_SelectedIndexChanged(object sender, EventArgs e)
 
    {
 
        pageIndexLab.Text = DropDownpage.SelectedValue;
 
        get_data();
 
    }
View Code

 

 

 

 

 

 

 

推荐阅读