大家请看我用这样的方法分页,请问执行效率会不会降低很多。

gasover 2003-01-07 08:56:10
不用 Select Top n where id <codeOfCurrentPage 的SQL语句
而用string strSQL = "select * from Score";
DataSet ds = new DataSet();
SQLDataAdapter MyAdapter = new SQLDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,StartIndex,PageSize,"aTable");

不知道含有大量记录的SQLDataAdapter会不会耗用我大量的内存,就像DataSet一样

因为我的 自动 id 字段 的值 经常会在实际的编辑删除操作中变得不连续,所以用
Select Top n where id <codeOfCurrentPage 很难实现。
...全文
45 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chyich 2003-01-08
  • 打赏
  • 举报
回复
用于datagrid自定义分页的sql语句

现学现卖,才在一本书上看到的:
private SqlDataReader CreateDataSource(int nPageIndex)
{
// nPageIndex is 0-based but we need it to be 1-based
nPageIndex ++;

// Set up the connection
String strConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;";
SqlConnection conn = new SqlConnection(strConn);

// 构造要执行的SQL语句 ,参数0表示每页要显示的记录条数,参数1表要排序的字段或表达式,参数2表示返回记录的最后一条记录的索引位置。
StringBuilder sb = new StringBuilder("");
sb.Append("SELECT TOP {0} * FROM ");
sb.Append("(SELECT TOP {0} employeeid, firstname, lastname FROM Employees ");
sb.Append("WHERE {1} IN ");
sb.Append("(SELECT TOP {2} {1} FROM Employees ORDER BY {1}) ");
sb.Append("ORDER BY {1} DESC) AS tmp ");
sb.Append("ORDER BY {1}");
String strCmd = sb.ToString();

// Set pseudo-parameters: RowsToFetch, SortField and RowsToFetch
// {0} - rowstodisplay
// {1} - sortfield
// {2} - rowstofetch

// Adjust the number of rows to display in the last page
int nRowsToDisplay = grid.PageSize;
int nMod = grid.VirtualItemCount % grid.PageSize;
if (nPageIndex == grid.PageCount && nMod >0)
nRowsToDisplay = nMod;

strCmd = String.Format(strCmd,
nRowsToDisplay,
ViewState["SortExpression"],
grid.PageSize * nPageIndex);
SqlCommand cmd = new SqlCommand(strCmd, conn);

// Execute the command
conn.Open();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}

大概的思路是这样,执行最里边的select语句,返回从第一条至grid.PageSize * nPageIndex条记录,并倒序排,然后取上述结果集的前grid.PageSize条,也就是我们想要的结果集了。至于第三条select语句用于再排一序,因为前面是倒排的。你试试吧。
gasover 2003-01-07
  • 打赏
  • 举报
回复
to chyich() 期待!
to xhan2000(popeye.net) 谢谢提点!
xhan2000 2003-01-07
  • 打赏
  • 举报
回复
这样分页页不科学


占用内存也很大

我做过测试
chyich 2003-01-07
  • 打赏
  • 举报
回复
其实可以用select语句实现,下面这个贴子是我以前回答的,现在打不开了,明天我去公司把代码给你贴出来。
http://expert.csdn.net/Expert/topic/1212/1212315.xml?temp=.3148462

62,253

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧