我是用SQL分页http://www.knowsky.com/339541.html 例如 分页有两种SQL语句的写法,但性能不同。分别是:SELECT TOP 10 * FROM TAlarmTag where TagId not in (SELECT TOP 810 TagId FROM TAlarmTag order by TagId asc) order by TagId asc SELECT Top 10 * FROM TAlarmTag WHERE TagId > (SELECT MAX(TagId) FROM (SELECT TOP 810 TagId FROM TAlarmTag ORDER BY TagId asc) AS TEMP) order by TagId 以上两种写法得到的结果都是一样的,但后一种写法的性能更好,速度是前一种的2倍。(各运行1000次,并取平均值,再比较) 测试代码:long[] runtime = new long[1000]; for (int i = 0; i < 1000; i++) { using (SqlConnection connection = new SqlConnection(this.connectionStrings)) { connection.Open(); SqlCommand command = connection.CreateCommand(); command.CommandText = textBox1.Text; Stopwatch sw = new Stopwatch(); sw.Start(); SqlDataReader reader = command.ExecuteReader(); object o; while (reader.Read()) { o = reader[0]; } sw.Stop(); runtime[i] = sw.Elapsed.Ticks; } } long average = runtime[0]; foreach (long one in runtime) { average = (one + average) / 2; } label1.Text = Convert.ToString(average);
该示例所用的Sql Server存储过程代码如下(仅适用于SQL Server 2005):CREATE PROCEDURE P_GetPagedOrders2005 @startIndex INT, @pageSize INT AS begin WITH orderList AS ( SELECT ROW_NUMBER() OVER (ORDER BY O.orderid DESC)AS Row, O.orderid,O.orderdate,O.customerid,C.CompanyName,E.FirstName+' '+E.LastName as EmployeeName from orders O left outer join Customers C on O.CustomerID=C.CustomerID left outer join Employees E on O.EmployeeID=E.EmployeeID)SELECT orderid,orderdate,customerid,companyName,employeeName FROM orderlist WHERE Row between @startIndex and @startIndex+@pageSize-1 end
这个可以用gridview的自带功能,也可以自己写代码
楼上两位说得都有道理,这个网上有很多的
可以到51aspx上找一些源码,参考一下
http://download.csdn.net/source/508587http://blog.csdn.net/shiluoguyan/archive/2007/03/20/1534821.aspxhttp://gridviewguy.com/ArticleDetails.aspx?articleID=271http://wengjinbao.cn/?tid=245
而且一般讲asp.net 的书里都有讲
分页有两种SQL语句的写法,但性能不同。分别是:SELECT TOP 10 * FROM TAlarmTag where TagId not in (SELECT TOP 810 TagId FROM TAlarmTag order by TagId asc) order by TagId asc SELECT Top 10 * FROM TAlarmTag WHERE TagId > (SELECT MAX(TagId) FROM (SELECT TOP 810 TagId FROM TAlarmTag ORDER BY TagId asc) AS TEMP) order by TagId 以上两种写法得到的结果都是一样的,但后一种写法的性能更好,速度是前一种的2倍。(各运行1000次,并取平均值,再比较) 测试代码:long[] runtime = new long[1000]; for (int i = 0; i < 1000; i++) { using (SqlConnection connection = new SqlConnection(this.connectionStrings)) { connection.Open(); SqlCommand command = connection.CreateCommand(); command.CommandText = textBox1.Text; Stopwatch sw = new Stopwatch(); sw.Start(); SqlDataReader reader = command.ExecuteReader(); object o; while (reader.Read()) { o = reader[0]; } sw.Stop(); runtime[i] = sw.Elapsed.Ticks; } } long average = runtime[0]; foreach (long one in runtime) { average = (one + average) / 2; } label1.Text = Convert.ToString(average);
看了下那个aspnetpager控件,感觉比较麻烦,要按照他的要求写存储过程,我想自己能够掌握这些,怎么写?
大侠给点思路~~!
同感呀......
自己也新手......
这几天刚整了一套简单的法子,之前自己也是一头雾水...首先数据库建表必须有主键。
其次,gridview数据绑定用sqldatasource
说明:asp.net对gridview功能的支持(例如:编辑、修改等等),根据数据源的不同功能相应的也不同,
如果是手写数据源,不采用sqldatasource,则编辑删除需要自己写。 俺感觉是新手,先自己有个办法把
功能做出来再说。
有主键,则sqldatasource配置数据源的时候,高级--生成insert,update....(必须有)然后,gridview绑定sqldatasource里面的编辑和删除就可以直接用了.....还不明白,再留言吧照着做一边应该没问题的了,我就这么弄的....
PagedDataSource pds = new PagedDataSource(); pds.DataSource = 本来绑定到gridview的数据现在绑定到这里;
pds.AllowPaging = true;
pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;
pds.PageSize = AspNetPager1.PageSize; gridview.DataSource = pds;
gridview.DataBind();(5)完成,最后在慢慢调样式就行了
SqlCommand sqlcom;
string strCon = "Data Source=(local);Database=数据库名;Uid=帐号;Pwd=密码";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
bind();
}//删除
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string sqlstr = "delete from 表 where id='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
sqlcon = new SqlConnection(strCon);
sqlcom = new SqlCommand(sqlstr,sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
bind();
}//更新
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
sqlcon = new SqlConnection(strCon);
string sqlstr = "update 表 set 字段1='"
+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',字段2='"
+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',字段3='"
+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where id='"
+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
sqlcom=new SqlCommand(sqlstr,sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
GridView1.EditIndex = -1;
bind();
}//取消
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
bind();
}//绑定
public void bind()
{
string sqlstr = "select * from 表";
sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlcon.Open();
myda.Fill(myds, "表");
GridView1.DataSource = myds;
GridView1.DataKeyNames = new string[] { "id" };//主键
GridView1.DataBind();
sqlcon.Close();
}
pds.DataSource = 本来绑定到gridview的数据现在绑定到这里;
我将datatable帮定时出错了。错误一下:
错误 1 无法将类型“System.Data.DataTable”隐式转换为“System.Collections.IEnumerable”。存在一个显式转换(是否缺少强制转换?) C:\Documents and Settings\lijihuan\桌面\dd\Default.aspx.cs 34 26 C:\...\dd\
<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>
<%@Import NameSpace="System.Data"%>
<%@Import NameSpace="System.Data.SqlClient"%>
<script runat="server" Language="C#">
void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int totalOrders = (int)SqlHelper.ExecuteScalar(CommandType.StoredProcedure, "P_GetOrderNumber");
AspNetPager1.RecordCount = totalOrders;
bindData();
}
} void bindData()
{
Repeater1.DataSource = SqlHelper.ExecuteReader(CommandType.StoredProcedure,"P_GetPagedOrders2005",
new SqlParameter("@startIndex", AspNetPager1.StartRecordIndex),
new SqlParameter("@pageSize", AspNetPager1.PageSize));
Repeater1.DataBind();
} void AspNetPager1_PageChanged(object src, EventArgs e)
{
bindData();
}
</script>
<HTML><HEAD>
<TITLE> AspNetPager Samples </TITLE>
<META NAME="Author" CONTENT="Webdiyer (www.webdiyer.com)">
</HEAD><BODY>
<form runat="server">
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table width="100%" border="1" cellspacing="0" cellpadding="4" style="border-collapse:collapse">
<tr style="backGround-color:#CCCCFF"><th style="width:15%"><asp:Literal ID="Literal1" runat="server" Text="<%$Resources:LocalizedText,orderid%>" /></th><th style="width:15%"><asp:Literal ID="Literal3" runat="server" Text="<%$Resources:LocalizedText,orderdate%>" /></th><th style="width:30%"><asp:Literal ID="Literal5" runat="server" Text="<%$Resources:LocalizedText,companyname%>" /></th><th style="width:20%"><asp:Literal ID="Literal2" runat="server" Text="<%$Resources:LocalizedText,customerid%>" /></th><th style="width:20%"><asp:Literal ID="Literal4" runat="server" Text="<%$Resources:LocalizedText,employeename%>" /></th></tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:#FAF3DC">
<td><%#DataBinder.Eval(Container.DataItem,"orderid")%></td>
<td><%#DataBinder.Eval(Container.DataItem,"orderdate","{0:d}")%></td>
<td><%#DataBinder.Eval(Container.DataItem, "companyname")%></td>
<td><%#DataBinder.Eval(Container.DataItem,"customerid")%></td>
<td><%#DataBinder.Eval(Container.DataItem,"employeename")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" Width="100%" HorizontalAlign="right" PageSize="8" OnPageChanged="AspNetPager1_PageChanged">
</webdiyer:AspNetPager>
</form>
</BODY>
</HTML>
该示例所用的Sql Server存储过程代码如下(仅适用于SQL Server 2005):CREATE PROCEDURE P_GetPagedOrders2005
@startIndex INT,
@pageSize INT
AS
begin
WITH orderList AS (
SELECT ROW_NUMBER() OVER (ORDER BY O.orderid DESC)AS Row, O.orderid,O.orderdate,O.customerid,C.CompanyName,E.FirstName+' '+E.LastName as EmployeeName
from orders O
left outer join Customers C
on O.CustomerID=C.CustomerID
left outer join Employees E
on O.EmployeeID=E.EmployeeID)SELECT orderid,orderdate,customerid,companyName,employeeName
FROM orderlist
WHERE Row between @startIndex and @startIndex+@pageSize-1
end