这个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文件,看看效果吧。
