这个asp.net三层架构(VS三层架构)实例是在http://www.aspbc.com/tech/showtech.asp?id=546这个实例的基础上实现的,大家先了解一下这个实例,弄懂这个实例。因为两个实例中相同的地方我就不重复了,我只介绍不同的地方。
在这个实例中可以学到的东西有:VS三层架构原理 C#调用存储过程方法 C#分页方法
开始了,先创建一个存储过程getlist
create PROCEDURE [dbo].[getlist] @page INT = 1, --当前页:默认为第一页 @page_size INT =10, --每页数量:10条 @maxpage INT = NULL OUTPUT --返回总页数 AS BEGIN SET NOCOUNT ON; Select * FROM (select ROW_NUMBER()Over(order by id desc) as rowId, * from users) as mytable where rowId between CONVERT(VARCHAR,(@page-1)*@page_size+1) and CONVERT(VARCHAR,@page*@page_size) DECLARE @count int SELECT @count=COUNT(*) FROM users IF @count % @page_size=0 SET @maxpage=@count/@page_size ELSE SET @maxpage=@count/@page_size+1 RETURN @maxpage END(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
下面开始C#开发了
和前面一个例子一样,前4步一样,我们从第5步开始,其中连接数据库代码不需要修改,再增加一个分页函数fpage
/// <summary> /// 功 能:C#分页代码 /// 创建人:wangsdong /// 来 源:www.aspbc.com /// 分页样式:首页 上一页 1...3 4,5,6,7,8...10 下一页 最后一页 /// </summary> /// <param name="current_page">当前页</param> /// <param name="page_count">总页数</param> /// <param name="furl">连接地址</param> /// <returns>字符串</returns> public string fpage(Int32 current_page,Int32 page_count,string furl) { string str = ""; Int32 i, j, k; Int32 num = 3; if (current_page <= num) { i = 1; } else { i = current_page - num; } if (current_page < page_count - num) { j = current_page + num; } else { j = page_count; } if (current_page > 1) { str += "<a href=\"" + furl + "page=1\">首页</a> <a href=\"" + furl + "page=" + (current_page - 1).ToString() + "\">上一页</a> "; if (current_page > num+1) { str += "<a href=\"" + furl + "page=1\">1</a>..."; } } else { str += "首页 上一页 "; } for (k = i;k <= j; k++) { if (k == current_page) { str += "<strong>" + k.ToString() + "</strong> "; } else { str += "<a href=\"" + furl + "page=" + k + "\">" + k.ToString() + "</a> "; } } if (current_page < page_count) { if (current_page <= page_count - num - 1) { str += "...<a href=\"" + furl + "page=" + page_count + "\">" + page_count.ToString() + "</a> "; } str += "<a href=\"" + furl + "page=" + (current_page + 1).ToString() + "\"> 下一页</a> <a href=\"" + furl + "page=" + page_count + "\">最后一页</a> "; } else { str += "下一页 最后一页 "; } return str; }(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
第7步需要修改一下,也是最重要的
因为要进行分页,所以要传入当前页数和每页要显示的数量,所以这里要修改原来的getlist()函数。
public string getlist(Int32 page,Int32 page_size) { string str = ""; Data.DBConn dbconn = new DBConn(); SqlConnection myconn = dbconn.getconn(); try { myconn.Open(); SqlCommand cmd = new SqlCommand("getlist", myconn); //调用存储过程 cmd.Parameters.Add("@page", SqlDbType.Int).Value = page; //给存储过程中的@page传值 cmd.Parameters.Add("@page_size", SqlDbType.Int).Value = page_size;//给存储过程中的@page_size传值 cmd.Parameters.Add("@maxpage", SqlDbType.Int); //获取存储过程中的总页数 cmd.Parameters["@maxpage"].Direction = ParameterDirection.Output; cmd.CommandType = CommandType.StoredProcedure; SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); if (ds.Tables[0].Rows.Count > 0) { str = "<table cellpadding=0 cellspacing=0 border=1 width=500 >\r\n"; string username, password; foreach (DataRow m in ds.Tables[0].Rows) { username = m["username"].ToString(); password = m["password"].ToString(); str += "<tr>\r\n"; str += " <td>" + username + "</td>\r\n"; str += " <td>" + password + "</td>\r\n"; str += "</tr>\r\n"; } str += "<tr><td colspan=2>" + dbconn.fpage(page,Convert.ToInt32(cmd.Parameters["@maxpage"].Value),"Default.aspx?") + "</td></tr>"; //调用分页 str += "</table>\r\n"; } da.Dispose(); da = null; myconn.Dispose(); myconn.Close(); } catch (Exception ex) { throw; } finally { myconn.Close(); } return str; }(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
因为要获取当前页和每页显示的数量,第8步要给里面的函数增加两个参数page,page_size,getlist函数要改成
public string getuserlist(Int32 page,Int32 page_size) { Dal.UserDB db = new UserDB(); return db.getlist(page,page_size); }(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
第9步也要增加两个参数
原来的protected void Page_Load中的代码改成
Int32 page, page_size; page =Convert.ToInt32(Request.Params["page"]); if (page==0) page = 1; page_size = 2; Bll.UserBll ub = new UserBll(); str = ub.getuserlist(page,page_size);(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
其他的都不变,浏览一下你的default.aspx文件,看看效果吧。