MYSQL编程:sqlserver 存储历程分页(按多前提排序)...
MySQL采用双重授权(DualLicensed),它们是GPL和MySQLAB制定的商业许可协议。cs页面挪用代码:复制代码代码以下:
publicintTotalPage=0;
publicintPageCurrent=1;
publicintPageSize=25;
publicintRowsCount=0;
stringuserid,username;
publicDataTabledt=newDataTable();
publicstringpath,userwelcome;
publicstringopt,cid;
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!IsPostBack)
{
if(Request.Params["page"]==nullRequest.Params["page"].ToString().Equals(""))
PageCurrent=1;
else
PageCurrent=int.Parse(Request.Params["page"].ToString());
this.getPage(outTotalPage,outRowsCount,PageSize,PageCurrent);
}
}
//挪用存储历程的函数
privatevoidgetPage(outinttotalPage,outintrowsCount,intpageSize,intcurrentPage)
{
SqlParameter[]parameters={
newSqlParameter("@TotalPage",SqlDbType.Int,4),
newSqlParameter("@RowsCount",SqlDbType.Int,4),
newSqlParameter("@PageSize",SqlDbType.Int,4),
newSqlParameter("@CurrentPage",SqlDbType.Int,4),
newSqlParameter("@SelectFields",SqlDbType.NVarChar,700),
newSqlParameter("@IdField",SqlDbType.NVarChar,50),
newSqlParameter("@OrderField",SqlDbType.NVarChar,200),
newSqlParameter("@OrderType",SqlDbType.NVarChar,2),
newSqlParameter("@TableName",SqlDbType.NVarChar,300),
newSqlParameter("@strWhere",SqlDbType.NVarChar,300),
};
parameters.Direction=ParameterDirection.Output;
parameters.Direction=ParameterDirection.Output;
parameters.Value=pageSize;
parameters.Value=currentPage;
parameters.Value="a.RLId,a.companyName,a.webSite,a.isRL,a.ordernum,a.isrl,a.userid";
parameters.Value="a.RLId";
parameters.Value="a.isrlasc,a.orderNum";
parameters.Value="1";
parameters.Value="qiYeRenlinga";
parameters.Value="1=1";//
DataSetds=Wm23Abc.DBUtility.DbHelperSQL.RunProcedure("getRecordByPage",parameters,"dt");
dt=ds.Tables;
totalPage=int.Parse(parameters.Value.ToString());
rowsCount=int.Parse(parameters.Value.ToString());
}
.aspx页面代码:
<tableid="SXFSTable"style="width:100%;"class="table">
<tr><td><b>公司称号</b></td><td><b>公司网址</b></td><td><b>认领形态</b></td></tr>
<%for(inti=0;i<dt.Rows.Count;i++)
{
%>
<tr>
<td><%=dt.Rows["companyName"].ToString()%>排序值:<%=dt.Rows["ordernum"].ToString()%></td>
<td><%=dt.Rows["webSite"].ToString()%>
是不是认领:<%=dt.Rows["userid"].ToString()%></td>
<td><%=dt.Rows["isRL"].ToString().Equals("0")?"<ahref="javascript:;"onclick="renLing(event,"+dt.Rows["RLId"].ToString()+");">认领该企业</a>":"<fontcolor="red">该企业已被认领</font>"%></td>
</tr>
<%
}
%>
</table>
</div>
<divstyle="margin-left:auto;margin-right:auto;width:70%;text-align:left;font-size:9pt;">
第<%=PageCurrent%>页共<%=RowsCount%>条共<%=TotalPage%>页
<%if(PageCurrent!=1)
{
%>
<ahref="test.aspx">首 页</a>
<ahref="test.aspx?page=<%=PageCurrent-1%>">上一页</a>
<%
}
if(PageCurrent!=TotalPage)
{
%>
<ahref="test.aspx?page=<%=PageCurrent+1%>">下一页</a>
<ahref="test.aspx?page=<%=TotalPage%>">末 页</a>
<%
}
%>
</div>
存储历程代码:
复制代码代码以下:
CREATEproc.
@TotalPageintoutput,--总页数
@RowsCountintoutput,--总条数
@PageSizeint,--每页几数据
@CurrentPageint,--以后页数
@SelectFieldsnvarchar(1000),--select语句可是不包括select
@IdFieldnvarchar(50),--主键列
@OrderFieldnvarchar(50),--排序字段,假如是多个字段,除最初一个字段外,前面都要加排序前提(asc/desc),不包括orderby,最初一个排序字段不必加排序前提
@OrderTypenvarchar(4),--1升序,0降序
@TableNamenvarchar(200),--表名
@strWherenvarchar(300)--前提
As
Begin
declare@RecordCountfloat
declare@PageNumint--分页根据数
Declare@Comparenvarchar(50)--对照字段辨别min大概max
Declare@Compare1nvarchar(2)--年夜于号“>”大概小于号"<“
Declare@OrderSqlnvarchar(10)--排序字段
declare@Sqlnvarchar(4000)
Declare@TemSqlnvarchar(1000)
Declare@nRdint
declare@afterRowsint
declare@tempTableNamenvarchar(10)
if(@OrderType=1)
Begin
set@OrderSql=asc
End
Else
Begin
set@OrderSql=desc
End
if(isnull(@strWhere,))
Set@strWhere=@strWhere
if(@strWhere=)
Set@strWhere=1=1
Set@TemSql=Select@RecordCount=Count(1)from+@TableName+where+@strWhere
execsp_executesql@TemSql,N@RecordCountfloatoutput,@RecordCountoutput
Set@RowsCount=@RecordCount
Set@TotalPage=ceiling(@RecordCount/@PageSize)
if(@CurrentPage>@TotalPage)
Set@CurrentPage=@TotalPage
if(@CurrentPage<1)
Set@CurrentPage=1
if(@PageSize<1)
Set@PageSize=1
print(@RecordCount)
if(@CurrentPage=1)
Begin
setRowcount@PageSize
set@Sql=select+@SelectFields+from+@TableName+where+@strWhere+orderby+@OrderField+
+@OrderSql+,+@IdField+asc
--print(@Sql)
execsp_executeSql@Sql
End
elseif(@CurrentPage=@TotalPage)
begin
set@afterRows=@RowsCount-(@CurrentPage-1)*@PageSize
setRowCount@afterRows
if(@OrderType=1)
begin
set@OrderField=REPLACE(@OrderField,asc,lai512343975)//这里用变量将asc和desc交换,哈哈,太神了
set@OrderField=REPLACE(@OrderField,desc,asc)
set@OrderField=REPLACE(@OrderField,lai512343975,desc)
set@Sql=select+@SelectFields+from+@TableName+where+@strWhere+orderby+@OrderField+desc+,+@IdField+asc
end
else
begin
set@OrderField=REPLACE(@OrderField,desc,lai512343975)
set@OrderField=REPLACE(@OrderField,asc,desc)
set@OrderField=REPLACE(@OrderField,lai512343975,asc)
set@Sql=select+@SelectFields+from+@TableName+where+@strWhere+orderby+@OrderField+asc+,+@IdField+asc
print(@Sql)
end
--print(@Sql)
execsp_executeSql@Sql
end
else
Begin
set@nRd=@PageSize*(@CurrentPage-1)
print(@nRd)
setRowCount@PageSize
set@Sql=select+@SelectFields+from+@TableName+where+@strWhere+and+@IdField+notin(selecttop+cast(@nRdasnvarchar(10))++@IdField+from+@TableName+where+@strWhere+orderby+@OrderField++@OrderSql+,+@IdField+asc)+orderby+@OrderField++@OrderSql+,+@IdField+asc
execsp_executeSql@Sql
--Print(@sql)
End
end
GO
无疑希望员工得到系统、有深度的培训,显然MySQL在这一点上还做得很不够。 外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。 很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。 可以动态传入参数,省却了动态SQL的拼写。 至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。 相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐 但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。 比如日志传送、比如集群。。。 两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
页:
[1]