我现在是用web程序查询数据库,因为有可能要查3个月这么长时间的记录,不知道会不会因为数据量过大,导致客户浏览的时候浏览器假死大家都是有经验的吧,给点建议,我要查询一个表中的大量数据,而且是一次提取,用什么方法比较好!~
解决方案 »
- C# windowForm程序 为什么两个button不能同时执行?
- SQL 分组合并数量
- 创建窗口失败
- 对象 判断运算符?
- 请教一下,有没有根据数据库字段生成实体类的软件啊?
- 关于TextBox的小问题,求解决方法.
- 请问在VC#中如何重命名文件?
- ActiveReport里的子表怎样根据主表里的记录变化而生成?
- 绑定了DataSource,但是数据变化的时候界面并不刷新。这是为什么?
- 请教:怎样获得数据库服务器的名称呢?
- 请问,为什么ClickOnce做的更新程序,放在server上,设置了程序运行前检查更新,但是,在有的client上,更新不到新版本,还是运行版本?
- 请教些类和接口的概念问题!
一般是通过分页的办法处理如果查询不慢的话,可以不使用分页存储过程,直接设置GridView分页,这样最简单。
增加个导出按钮。给客户导出excel就行了。
同意~导出excel速度还是可以接受的
datagrid向导里也可以设置每页多少行
GRIDVIEW弄1W条记录要几分钟,自己拼出来只要10几秒甚至更少
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int,--每页显示记录条数
@currentpage int,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
@rowcount int output,--总记录数,共有几条信息
@pagecount int output--总页数,共有多少页
AS
declare @countsql nvarchar(50)
declare @sql nvarchar(200)
declare @subsql nvarchar(100)--not in子sql语句
declare @tmpOrderid nvarchar(50)
--返回总记录数,并赋值给输出参数@rowcount
set @countsql='select @totalcount=count(*) from '+@tablename
exec sp_executesql @countsql,N'@totalcount int out',@rowcount output--判断字段名是否为空
if @fieldname is null or @fieldname=''
set @fieldname=' * '--判断是否排序及排序方式
if @orderid is null or @orderid=''
set @tmpOrderid=' '
else
begin
if @sort=0
set @tmpOrderid='order by '+@orderid+' desc'
else
set @tmpOrderid='order by '+@orderid+' asc'
end--计算页数
if @rowcount%@pagesize>0
set @pagecount =(@rowcount/@pagesize)+1;
else
set @pagecount=@rowcount/@pagesize;--分页算法实现
set @subsql='select top'+str(@pagesize*(@currentpage-1))+' '+@orderid+' from '+@tablename+' '+@tmpOrderid
set @sql='select top'+str(@pagesize)+' '+@fieldname+' from '+@tablename+' where '+@orderid+' not in ('+@subsql+')'+@tmpOrderid
exec(@sql)
===========================================================
.cs文件:
protected void Page_Load(object sender, EventArgs e)
{
int CurrentPage,RowCount,PageCount;
int PageSize = 2;
if (Request["CurrentPage"] == null||Convert.ToInt32(Request["CurrentPage"])< 1)
{
CurrentPage=1;
}
else
{
CurrentPage=Convert.ToInt32(Request["CurrentPage"]);
} //数据库操作
SqlConnection sqlconn = new SqlConnection(ConfigurationManager.AppSettings["ConnStr"].ToString());
SqlCommand cmd = new SqlCommand("pagelist", sqlconn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlconn;
SqlParameter[] prams ={
new SqlParameter("@tablename",SqlDbType.NVarChar,50),
new SqlParameter("@fieldname",SqlDbType.NVarChar,50),
new SqlParameter("@pagesize",SqlDbType.Int),
new SqlParameter("@currentpage",SqlDbType.Int),
new SqlParameter("@orderid",SqlDbType.NVarChar,50),
new SqlParameter("@sort",SqlDbType.Int),
new SqlParameter("@rowcount",SqlDbType.Int),
new SqlParameter("@pagecount",SqlDbType.Int)};
prams[0].Value = "news";//表名
prams[1].Value ="*";//字段名
prams[2].Value =PageSize;//每页显示条数
prams[3].Value =CurrentPage;//当前页数
prams[4].Value ="id";//主键
prams[5].Value =1;//排序方式,0表示降序,1表示升序
prams[6].Direction = ParameterDirection.Output;//总记录数
prams[7].Direction = ParameterDirection.Output;//总页数
foreach(SqlParameter pram in prams)
{
cmd.Parameters.Add(pram);
}
sqlconn.Open();
SqlDataAdapter sda = new SqlDataAdapter();
DataSet ds = new DataSet();
sda.SelectCommand = cmd;
sqlconn.Close();
sda.Fill(ds);
//数据库操作结束 RowCount = (int)cmd.Parameters["@rowcount"].Value;
PageCount =(int)cmd.Parameters["@pagecount"].Value;
if (CurrentPage>PageCount)
{
Response.Redirect("CutPage.aspx?CurrentPage="+Convert.ToString(PageCount));
Response.End();
}
this.lblCurrent.Text = Convert.ToString(CurrentPage);
this.lblPageTotal.Text = Convert.ToString(PageCount);
this.lblRowsTotal.Text = Convert.ToString(RowCount);
this.lblPageSize.Text = Convert.ToString(PageSize); this.hlFirst.NavigateUrl = "CutPage.aspx?CurrentPage=1";
this.hlPrev.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(CurrentPage-1);
this.hlNext.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(CurrentPage+1);
this.hlLast.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(PageCount);
if (Convert.ToInt32(CurrentPage) == 1)
{
this.hlPrev.Enabled = false;
this.hlFirst.Enabled = false;
}
if (Convert.ToInt32(CurrentPage) == PageCount)
{
this.hlNext.Enabled = false;
this.hlLast.Enabled = false;
} GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}