当前位置:asp编程网>技术教程>Net教程>  正文

asp.net三层架构调用存储过程的实例

2011-11-01 11:59:40   来源:www.aspbc.com    作者:wangsdong   浏览量:2517   收藏

这个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>&nbsp;<a href=\""
   + furl + "page=" + (current_page - 1).ToString() + "\">上一页</a>&nbsp;";
        if (current_page > num+1)
        {
            str += "<a href=\"" + furl + "page=1\">1</a>...";
        }
    }
    else
    {
        str += "首页&nbsp;上一页&nbsp;";
    }

    for (k = i;k <= j; k++)
    {
        if (k == current_page)
        {
        str += "<strong>" + k.ToString() + "</strong>&nbsp;";
        }
        else
        {
str += "<a href=\"" + furl + "page=" + k + "\">" + k.ToString() + "</a>&nbsp;";
        }
    }

    if (current_page < page_count)
    {
        if (current_page <= page_count - num - 1)
        {
       str += "...<a href=\"" + furl + "page=" + page_count + "\">" 
+ page_count.ToString() + "</a>
&nbsp;";
        }
  str += "<a href=\"" + furl + "page=" + (current_page + 1).ToString() + "\">
下一页</a>&nbsp;<a href=\"" + furl + "page=" + page_count + "\">最后一页</a>
&nbsp;";
        
    }
    else
    {
        str += "下一页&nbsp;最后一页&nbsp;";
    }

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

 



关于我们-广告合作-联系我们-积分规则-网站地图

Copyright(C)2013-2017版权所属asp编程网