这种情况没有什么好的解决方法,只能用T-SQL语句或存储过程读取需要的数据,一般来几百万条记录也不会一次显示在页面上,所以,分页存储过程是可行之路,这里有很多讲分页存储过程的例子,我就不罗嗦了。

解决方案 »

  1.   

    不知道你为什么要把百万条记录提到页面上,我想应该可以避免,至于超时,我想试因为你的数据量太大,当web服务器返回你的请求时,对你的数据时要进行格式化的,这个过程会很漫长,所以建议你:如果要对百万条记录进行数据分析运算,一定要利用后台存储过程(不用说b/s,c/s也是如此),如果要查询,可以考虑分期显示,例如分页,这个操作就很简单了,可以搜索一下
      

  2.   

    楼上的各位老大,我整个系统都没有用到存储过程,为的是减少将来更换数据库出现问题!不用存储过程有什么好的解决办法吗?我查了一下有一个xmlhttp,有没有人用过这个?
      

  3.   

    to ddggggdd() 
        分期显示是什么意思?
      

  4.   

    用DataReader,分页读取数据就可以哪!
      

  5.   

    to MyNoName(夏云天)    能不能说详细点?
      

  6.   

    create proc GetAuthors
    @Author_Last_Name as varchar(100) = null,
    @StartRow as int = null,
    @StopRow as int = null
    AS---- 建立有标识符列的table变量
    declare @t_table table
    (
    [rownum] [int] IDENTITY (1, 1) Primary key NOT NULL ,
    [Author_Last_Name] [varchar] (40) ,
    [Author_First_Name] [varchar] (20) ,
    [phone] [char] (12) ,
    [address] [varchar] (40) ,
    [city] [varchar] (20) ,
    [state] [char] (2) ,
    [zip] [char] (5)
    )---- 在返回指定的@StopRow行数之后停止处理查询
    Set RowCount @StopRow---- 插入到table变量中
    insert @t_table
    (
    [Author_Last_Name],[Author_First_Name],[phone],[address],[city],[state],[zip]
    )
    SELECT [Author_Last_Name],[Author_First_Name],[phone],[address],[city],[state],[zip]FROM authors
    WHERE Author_Last_Name like '%' + @Author_Last_Name + '%'
    ORDER BY Author_Last_Name---- 返回到正确的结果
    SELECT * FROM @t_table WHERE rownum >= @StartRow
    ORDER BY rownumGO.vb
    下面是使用VB.NET编写的“下一页”事件的例子:Private Sub ButtonNext_Click (ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles ButtonNext.Clickviewstate("StartRow") = viewstate("StartRow") + dgrid.PageSize
    viewstate("StopRow") = viewstate("StartRow") + dgrid.PageSize'运行存储过程,返回SQLDataReader
    dgrid.DataSource = RunSprocReturnDR (textAu_lname.Text, _
    textAu_fname.Text, viewstate("StartRow"),viewstate("StopRow"))
    dgrid.DataBind()End Sub
      

  7.   

    dataset里的数据是存在内存中的,一百万条数据在内存中肯定会有问题。其实这种问题主要是你设计问题,有必要一次取一百万条数据吗?有经验的程序员是不会犯这种愚蠢的错误的。
      

  8.   

    现在是顾问提出这种要求我也没有办法!能不能放在xml中?
      

  9.   

    不管是直接读取数据, 还是先存到XML文档, 但最后还是要放到dataset, 如果dataset不能放百万条数据, 那是咱那么也实现不了了. 不知道可以不可以把数据先放到多个datatable,然后在用dataset... 没有试过不是很清楚...或者在你程序中自己控制每次的读取量,(类似用在code里编写stored procedure)每次读百万个数据, 这样会很没效率, 也许你应该换个办法试试
      

  10.   

    或者放到xml中,然后以xml的形式返回给用户, 或许可以!
      

  11.   

    to darren_zhu_NZ()
       我现在想的就是能不能放在xml中,可是没有试过不知道效率怎么样!
      

  12.   

    我现在想的就是能不能放在xml中,可是没有试过不知道效率怎么样!
    ============XML不是用来放东西, 是用来传输数据的.这个社区你觉得怎么样? 很多技术都用到了xml. 我觉得不稳定, 至少和用数据库的论坛相比...xml还有很大的发展空间, 不急不急....
      

  13.   

    to darren_zhu_NZ()
        我对xml还不太了解,可是上网查了一下发现xmlhttp可以实现无刷新更新数据,但是用了这个我应该把数据放到什么地方啊?
      

  14.   

    to wuzhijie(阿杰)
    兄弟,我现在讨论的不是有没有意义,而是讨论怎么实现
      

  15.   

    不用存储过程也可以用多个select语句来实现分页,在我的主页上有这样的SQL语句生成工具,而且有免费分页控件AspNetPager,楼主可以试试:http://www.webdiyer.com
      

  16.   

    to webdiyer(陕北吴旗娃) 
        我自己做了分页控件,现在不是分页的问题,是数据量大的问题!
      

  17.   

    XMLHTTP就是用HTTP POST xml格式的数据我觉得很难实现, 要把百万个数据放到HTTP Payload里, 可能一下子放不下下面有个例子
        <%
        if (Request.ServerVariables("REQUEST_METHOD") == "POST" )
        {//this part runs on the server, in response to the XMLHTTP post
    var req= Server.CreateObject("Microsoft.XMLDOM");
         req.async=false;
         req.load(Request);  //load the XML sent by the browser
         if (req.documentElement.nodeName=="timesheet")  //my usual method for checking the nature of the data sent
         {
    //do something fun with the timesheet data
    Response.write("<h1>Timesheet Updated!</h1><b>"+req.documentElement.text+"</b>");
         }
        }
        else
        {  %>
        
    <div id="divDisplay">The response will be put in here</div>
    <input type="button" onclick="sendData();" value="Send it!">
    <script>
    function sendData(){
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    xmlhttp.Open("POST", "http://www.yoursite.com/thispage.asp", false);
    xmlhttp.Send("<timesheet>An impossibly useless timesheet fragment</timesheet>");
    divDisplay.innerHTML=xmlhttp.responseText;
    }
    </script>
     <% } %>
      

  18.   

    100万条记录实现动态生成并通过http传输是没有意义的,因为数据量太大会造成服务器过载,而且页面也会超时。建议生成文件,然后通过http或者ftp下载静态文件,或者通过邮件传送结果文件。文件可以设置成csv格式,或者xml格式,反正能够给对方的系统识别就可以了。
      

  19.   

    总结一下上面各位兄弟的讨论:好象大多数人都同意把数据放在xml中,我能不能分批的把数据更新到xml中?
      

  20.   

    改一下服务器的machine config试试!把它的延时设长,这样估计就不会出现超时的情况!