天天看點

c#.net存儲過程版本的分頁

昨日編寫了一個c#.net存儲過程版本的分頁,支援百萬資料分頁

因為有以前的CF、Javascript、Php及Asp的分頁基本,昨天拿着C#.net順心很多,其實也就是把CF中的代碼直接複制粘貼進Vs.net中,編寫了一個類也就OK了。

用起來挺順心。調用方式大緻如下:

protected void dataBind() {

        int page = 1;

        if (Request.QueryString["page"] != null){

            page = Convert.ToInt32(Request["page"]);

        }

        if (Request.Form["page"] != null){

            page = Convert.ToInt32(Request.Form["page"]);

        }

        int myPageSize = 20;

        SqlConnection conn = new SqlConnection(dbTool.myConnStr);

        SqlCommand cmd = new SqlCommand("p_page", conn);

        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("@Tables", SqlDbType.VarChar, 50);

        cmd.Parameters["@Tables"].Value = "testTable";

        cmd.Parameters.Add("@PrimaryKey", SqlDbType.VarChar, 50);

        cmd.Parameters["@PrimaryKey"].Value = "id";

        cmd.Parameters.Add("@Sort", SqlDbType.VarChar, 50);

        cmd.Parameters["@Sort"].Value = "id asc";

        cmd.Parameters.Add("@CurrentPage", SqlDbType.Int, 4);

        cmd.Parameters["@CurrentPage"].Value = page;

        cmd.Parameters.Add("@PageSize", SqlDbType.Int, 4);

        cmd.Parameters["@PageSize"].Value = myPageSize;

        cmd.Parameters.Add("@Fields", SqlDbType.VarChar, 50);

        cmd.Parameters["@Fields"].Value = "id,username";

        cmd.Parameters.Add("@Filter", SqlDbType.VarChar, 50);

        cmd.Parameters["@Filter"].Value = "id>1000 and id<10000";

        cmd.Parameters.Add("@Group", SqlDbType.VarChar, 50);

        cmd.Parameters["@Group"].Value = "";

        cmd.Parameters.Add("@TotalPage", SqlDbType.Int, 4);

        cmd.Parameters["@TotalPage"].Direction = ParameterDirection.Output;

        cmd.Parameters.Add("@TotalRecord", SqlDbType.Int, 4);

        cmd.Parameters["@TotalRecord"].Direction = ParameterDirection.ReturnValue;

        conn.Open();

        //先取得傳回值

        cmd.ExecuteNonQuery();

        int totalPage, totalRecord;

        totalPage = Convert.ToInt32(cmd.Parameters["@TotalPage"].Value);

        totalRecord = Convert.ToInt32(cmd.Parameters["@totalRecord"].Value);

        //再取得傳回記錄集

        SqlDataReader sdr = cmd.ExecuteReader();

        GridView1.DataSource = sdr;

        GridView1.DataBind();

        cmd.Dispose();

        conn.Dispose();

        tools mytool = new tools(Response, Request);

        lblPageLink.Text = mytool.PageLink(totalRecord, totalPage, page, myPageSize, 3, "page",true);

        mytool.Dispose();

    }

繼續閱讀