标题: ASP.NET结合存储过程写的通用搜索分页程序
问天
元帅
Rank: 1


元帅勋章 终身成就勋章
UID 11493
精华 186
积分 34139
帖子 33348
威望 88
金币 13137
热心 2612
阅读权限 100
注册 2006-4-7
状态 在线
ASP.NET结合存储过程写的通用搜索分页程序

存储过程改自bigeagle的论坛分页程序。请大家批判!:)
select.aspx   
--------------------------------------------------------------------------------      
<%@ Page Language="C#" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<script runat="server">   
    protected void Page_Load(Object sender, EventArgs e)
         {
             int intPageNo,intPageSize,intPageCount;
             intPageSize = 25;
             if (Request["CurrentPage"]==null)
                 {
                     intPageNo = 1;
                 }
             else
                 {
                     intPageNo = Int32.Parse(Request["CurrentPage"]);


                 }
            
            
             SqlConnection mySqlConnection = new SqlConnection("server=(local);Database=test;user id=sa;password=");
             SqlCommand mySqlCommand = new SqlCommand("up_GetTopicList", mySqlConnection);
             mySqlCommand.CommandType = CommandType.StoredProcedure;
            
             SqlParameter workParm;
            
             //搜索表字段,以","号分隔   
             workParm = mySqlCommand.Parameters.Add("@a_TableList", SqlDbType.VarChar, 200);
             mySqlCommand.Parameters["@a_TableList"].Value = "OFFERID,type,offertime";
            
             //搜索表名
             workParm = mySqlCommand.Parameters.Add("@a_TableName", SqlDbType.VarChar, 30);
             mySqlCommand.Parameters["@a_TableName"].Value = "offer";
            
             //搜索条件,如"select * from aa where a=1 and b=2 and c=3"则条件为"where a=1 and b=2 and c=3"
             workParm = mySqlCommand.Parameters.Add("@a_SelectWhere", SqlDbType.VarChar, 500);  
             mySqlCommand.Parameters["@a_SelectWhere"].Value = "where type='idl'";
            
             //表主键字段名,必须为INT类型
             workParm = mySqlCommand.Parameters.Add("@a_SelectOrderId", SqlDbType.VarChar, 50);
             mySqlCommand.Parameters["@a_SelectOrderId"].Value = "offerid";      
            
             //排序,可以使用多字段排序但主键字段必需在最前面
             workParm = mySqlCommand.Parameters.Add("@a_SelectOrder", SqlDbType.VarChar, 50);
             mySqlCommand.Parameters["@a_SelectOrder"].Value = "order by offerid desc";  


            
             //页号
             workParm = mySqlCommand.Parameters.Add("@a_intPageNo", SqlDbType.Int);
             mySqlCommand.Parameters["@a_intPageNo"].Value = intPageNo;
            
             //每页显示数
             workParm = mySqlCommand.Parameters.Add("@a_intPageSize", SqlDbType.Int);
             mySqlCommand.Parameters["@a_intPageSize"].Value = intPageSize;
            
             //总记录数(存储过程输出参数)  
             workParm = mySqlCommand.Parameters.Add("@RecordCount", SqlDbType.Int);
             workParm.Direction = ParameterDirection.Output;            
            
             //当前页记录数(存储过程返回值)
             workParm = mySqlCommand.Parameters.Add("RowCount", SqlDbType.Int);
             workParm.Direction = ParameterDirection.ReturnValue;

   
             mySqlConnection.Open();
             Repeater.DataSource = mySqlCommand.ExecuteReader();                                   
            
             Repeater.DataBind();
            
             mySqlConnection.Close();
            
             Int32 RecordCount = (Int32)mySqlCommand.Parameters["@RecordCount"].Value;
             Int32 RowCount = (Int32)mySqlCommand.Parameters["RowCount"].Value;   
            
             LabelRecord.Text = RecordCount.ToString();
             LabelRow.Text = intPageNo.ToString();
             intPageCount = RecordCount/intPageSize;
             if ((RecordCount%intPageSize)>0)
                 intPageCount  = 1;
             LabelPage.Text = intPageCount.ToString();
            
             if (intPageNo>1)
                 {   
                     HLFistPage.NavigateUrl = "select.aspx?CurrentPage=1";
                     HLPrevPage.NavigateUrl = String.Concat("select.aspx?CurrentPage=","",intPageNo-1);
                 }
             else
                 {
                     HLFistPage.NavigateUrl = "";
                     HLPrevPage.NavigateUrl = "";
                     //HLFistPage.Enabled = false;  
                     //HLPrevPage.Enabled = false;
                 }
                 
             if (intPageNo<intPageCount)
                 {
                     HLNextPage.NavigateUrl = String.Concat("select.aspx?CurrentPage=","",intPageNo 1);
                     HLEndPage.NavigateUrl = String.Concat("select.aspx?CurrentPage=","",intPageCount);
                 }   
             else
                 {
                     HLNextPage.NavigateUrl = "";
                     HLEndPage.NavigateUrl = "";
                     //HLNextPage.Enabled=false;
                     //HLEndPage.Enabled=false;
                 }
            
         }   
</script>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<head>
    <link href="/style.css" rel="stylesheet" />
<style type="text/css">
.high {  font-family: "宋体"; font-size: 9pt; line-height: 140%}
.mid {  font-size: 9pt; line-height: 12pt}
.small {  font-size: 9pt; line-height: normal}
.TP10_5 {
    font-size: 14px;
    line-height: 140%;
}
</style>
    <style type="text/css">A:link {
    COLOR: #cc6666
}
</style>
</head>
<body>
    <form runat="server">
<span class="high">              第<font color="#CC0000"><aspabel id="LabelRow" runat="server"/></font>页 | 共有<aspabel id="LabelPage" runat="server"/>页
              | <aspabel id="LabelRecord" runat="server"/>条信息 |   
              <asp:HyperLink id="HLFistPage" Text="首页" runat="server"/>
              | <asp:HyperLink id="HLPrevPage" Text="上一页" runat="server"/>
              | <asp:HyperLink id="HLNextPage" Text="下一页" runat="server"/>
              | <asp:HyperLink id="HLEndPage" Text="尾页" runat="server"/></span><br>
   
        <asp:Repeater id=Repeater runat="server">   
            <HeaderTemplate>

   
      <table width="583" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td bgcolor="#000000"><table width="100%" border="0" cellpadding="4" cellspacing="1" class="TP10_5">
              <tr bgcolor="#999999">
                <td align="center"> <strong><font color="#FFFFFF">订单号</font></strong></td>
                <td align="center"> <strong><font color="#FFFFFF">服务项目</font></strong></td>
                <td align="center"> <strong><font color="#FFFFFF">预订日期</font></strong></td>


                <td align="center"> <strong><font color="#FFFFFF">操作人员</font></strong></td>
                <td align="center"> <strong><font color="#FFFFFF">分配状态</font></strong></td>
                <td> <div align="center"></div></td>
              </tr>
            </HeaderTemplate>

   
            <ItemTemplate>   
              <tr align="center" bgcolor="#FFFFFF" class="small" onMouseOver='this.style.background="#CCCCCC"' onMouseOut='this.style.background="#FFFFFF"'>
                <td><%# DataBinder.Eval(Container.DataItem, "offerid") %></td>
                <td><%# DataBinder.Eval(Container.DataItem, "type") %></td>
                <td><%# DataBinder.Eval(Container.DataItem, "offertime") %></td>
                <td> </td>
                <td> </td>
                <td><a href="javascript:void(window.open('info.asp?id=<%# DataBinder.Eval(Container.DataItem, "offerid") %>','订单分配','height=600,width=1000'))">订单详情</a></td>  
              </tr>   
            </ItemTemplate>   
            <FooterTemplate>      
            </table></td>
        </tr>
      </table>      
            </FooterTemplate>

   
        </asp:Repeater>

   
    </form>
</body>
</html>

   
--------------------------------------------------------------------------------

   

up_GetTopicList.sql   
--------------------------------------------------------------------------------

   
CREATE proc up_GetTopicList
       @a_TableList Varchar(200),
       @a_TableName Varchar(30),
       @a_SelectWhere Varchar(500),
       @a_SelectOrderId Varchar(20),
       @a_SelectOrder Varchar(50),
       @a_intPageNo int,
       @a_intPageSize int,
       @RecordCount int OUTPUT
as
   /*定义局部变量*/
   declare @intBeginID         int
   declare @intEndID           int
   declare @intRootRecordCount int
   declare @intRowCount        int
   declare @TmpSelect          NVarchar(600)
   /*关闭计数*/  
   set nocount on
   
   /*求总共根贴数*/

   
   select @TmpSelect = 'set nocount on;select @SPintRootRecordCount = count(*) from ' @a_TableName ' ' @a_SelectWhere
   execute sp_executesql
             @TmpSelect,
             N'@SPintRootRecordCount int OUTPUT',
             @SPintRootRecordCount=@intRootRecordCount OUTPUT   
select @RecordCount = @intRootRecordCount      
   if (@intRootRecordCount = 0)    --如果没有贴子,则返回零
       return 0
      
   /*判断页数是否正确*/
   if (@a_intPageNo - 1) * @a_intPageSize > @intRootRecordCount
      return (-1)   
   /*求开始rootID*/
   set @intRowCount = (@a_intPageNo - 1) * @a_intPageSize   1
   /*限制条数*/      
   select @TmpSelect = 'set nocount on;set rowcount @SPintRowCount;select @SPintBeginID = ' @a_SelectOrderId ' from ' @a_TableName ' ' @a_SelectWhere ' ' @a_SelectOrder
   execute sp_executesql
             @TmpSelect,
             N'@SPintRowCount int,@SPintBeginID int OUTPUT',
             @SPintRowCount=@intRowCount,@SPintBeginID=@intBeginID OUTPUT   

   /*结束rootID*/
   set @intRowCount = @a_intPageNo * @a_intPageSize
   /*限制条数*/

   
   select @TmpSelect = 'set nocount on;set rowcount @SPintRowCount;select @SPintEndID = ' @a_SelectOrderId ' from ' @a_TableName ' ' @a_SelectWhere ' ' @a_SelectOrder
   execute sp_executesql
             @TmpSelect,
             N'@SPintRowCount int,@SPintEndID int OUTPUT',
             @SPintRowCount=@intRowCount,@SPintEndID=@intEndID OUTPUT      

if @a_SelectWhere='' or @a_SelectWhere IS NULL
   select @TmpSelect = 'set nocount off;set rowcount 0;select ' @a_TableList ' from ' @a_TableName ' where ' @a_SelectOrderId ' between '
else
   select @TmpSelect = 'set nocount off;set rowcount 0;select ' @a_TableList ' from ' @a_TableName ' ' @a_SelectWhere ' and ' @a_SelectOrderId ' between '

   
if @intEndID > @intBeginID
   select @TmpSelect = @TmpSelect '@SPintBeginID and @SPintEndID' ' ' @a_SelectOrder
else
   select @TmpSelect = @TmpSelect '@SPintEndID and @SPintBeginID' ' ' @a_SelectOrder   
   execute sp_executesql
             @TmpSelect,
             N'@SPintEndID int,@SPintBeginID int',
             @SPintEndID=@intEndID,@SPintBeginID=@intBeginID

   
   return(@@rowcount)
   --select @@rowcount
GO

网友 问天 签名 - 网友社区 请您回个帖。谢谢
PR查询 免费域名 免费空间
顶部
[广告] 免费域名(Free Subdomain) 免费空间(Free hosting) PR查询(Google Pagerank)



当前时区 GMT+8, 现在时间是 2008-9-7 10:52
信产部ICP备案:京ICP备05066424号 北京市公安局网监备案:1101050648号

Powered by Discuz! 5.5.0
清除 Cookies - 联系我们 - 网友俱乐部 - Archiver - WAP