in

SDT Community Server

SDT Forums, Blogs, Photos server.

wego

October 2007 - Posts

  • ASP.NET Download Web File

    今天写了个 DownloadWebFile 函数,  采用 读取 --> 输出 方式.  但发现当第二次打开 Download 的文件时, 文件报已损坏错误. code 如下:

    protected void DownloadFile(string url)
      {
       System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); 
       System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
       Stream respStream = myrp.GetResponseStream();

       Response.Expires = 0;
       Response.Clear();

       Response.ContentType = myrp.ContentType;

       const int BUFFER_SIZE = 16*1024;
       byte[] buffer = new byte[BUFFER_SIZE];
       int length;   
       
       length = respStream.Read(buffer, 0, BUFFER_SIZE);
       while(length > 0)
       {
          Response.BinaryWrite(buffer);   
          length = respStream.Read(buffer, 0, BUFFER_SIZE);
       }

       Response.AddHeader("content-disposition", String.Format("attachment;filename={0}", "Competitor's list.xls"));
       Response.AddHeader("pragma", "no-cache");
       Response.AddHeader("expires", "0");
       Response.AddHeader("cache-control", "must-revalidate, post-check=0, pre-check=0");   

       Response.Flush();
       Response.End();   
      }

     后在 Wicky 同志的帮助下,  采用 读取 --> 中传站存放 -> 输出 方式得已解决 !

    protected void DownloadFile(string url)
      {
       System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); 
       System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
       Stream respStream = myrp.GetResponseStream();

       Response.Expires = 0;
       Response.Clear();

       Response.ContentType = myrp.ContentType;

       const int BUFFER_SIZE = 16*1024;
       byte[] buffer = new byte[BUFFER_SIZE];
       int length;   
       
       MemoryStream ms = new MemoryStream();
       
       length = respStream.Read(buffer, 0, BUFFER_SIZE);
       while(length > 0)
       {
          ms.Write(buffer, 0, length);
          length = respStream.Read(buffer, 0, BUFFER_SIZE);
       }

       Response.AddHeader("content-disposition", String.Format("attachment;filename={0}", "Competitor's list.xls"));
       Response.AddHeader("pragma", "no-cache");
       Response.AddHeader("expires", "0");
       Response.AddHeader("cache-control", "must-revalidate, post-check=0, pre-check=0");   

       Response.BinaryWrite(ms.GetBuffer());

       Response.Flush();
       Response.End();   
      }

     

     

     

  • FireBird 求指定行数记录

    数据库 FireBird 求指定行数记录的 sql 语法不是Oracle的rownum,也不是SQL Server的Top n.  而是使用以下比较特别的形式.

    1)  select First 2 skip 3 * from table1 order by field1 desc     -- 取第4行到第5行

    2)  select * from table1 order by field1 desc ROWS 2 TO 4   -- 取第2行到第4行

    3)  select First 3 skip 0 * from table1 order by field1 desc     -- 同 SQL Server 的 Top 3 

    First n skip m形式会在忽略掉m行后,取前n行;

    而rows m to n形式,则是从第m行取到第n行。

Copyright SDT, 2006-2009. All rights reserved.