手机、游戏在线直充

C#实现MS SQL数据导出到Excel

将MS SQL数据导出到Excel:
 public static void Export(System.Web.UI.Page page, System.Data.DataTable tab, string FileName)
    
{
        System.Web.HttpResponse httpResponse 
= page.Response;
        System.Web.UI.WebControls.DataGrid dataGrid 
= new System.Web.UI.WebControls.DataGrid();
        dataGrid.DataSource 
= tab.DefaultView;
        dataGrid.AllowPaging 
= false;
        dataGrid.HeaderStyle.BackColor 
= System.Drawing.Color.Green;
        dataGrid.HeaderStyle.HorizontalAlign 
= HorizontalAlign.Center;
        dataGrid.HeaderStyle.Font.Bold 
= true;
        dataGrid.DataBind();
        httpResponse.AppendHeader(
"Content-Disposition""attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8)); //filename=*.xls;
        httpResponse.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        httpResponse.ContentType 
= "application / ms - excel";
        System.IO.StringWriter tw 
= new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw 
= new System.Web.UI.HtmlTextWriter(tw);
        dataGrid.RenderControl(hw);
        dataGrid.Visible 
= false;
        
string filePath = page.Server.MapPath(".."+ "\\\\Files\\\\" + FileName;
        System.IO.StreamWriter sw 
= System.IO.File.CreateText(filePath);
        sw.Write(tw.ToString());
        sw.Close();
        DownFile(httpResponse, FileName, filePath);
        httpResponse.End();
    }

    
/// <summary>
    
/// 
    
/// </summary>
    
/// <param name="Response"></param>
    
/// <param name="fileName"></param>
    
/// <param name="fullPath"></param>
    
/// <returns></returns>

    private static bool DownFile(System.Web.HttpResponse Response, string fileName, string fullPath)
    
{
        
try
        
{
            Response.ContentType 
= "application / octet - stream";
            Response.AppendHeader(
"Content-Disposition""attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ";charset=GB2312");
            System.IO.FileStream fs 
= System.IO.File.OpenRead(fullPath);
            
long fLen = fs.Length;
            
int size = 102400;//每100K同时下载数据 
            byte[] readData = new byte[size];//指定缓冲区的大小 
            if (size > fLen) size = Convert.ToInt32(fLen);
            
long fPos = 0;
            
bool isEnd = false;
            
while (!isEnd)
            
{
                
if ((fPos + size) > fLen)
                
{
                    size 
= Convert.ToInt32(fLen - fPos);
                    readData 
= new byte[size];
                    isEnd 
= true;
                }

                fs.Read(readData, 
0, size);//读入一个压缩块 
                Response.BinaryWrite(readData);
                fPos 
+= size;
            }

            fs.Close();
            System.IO.File.Delete(fullPath);
            
return true;
        }

        
catch
        
{
            
return false;
        }

    }

posted on 2007-12-07 14:57  ljping  阅读(1069)  评论(0)    收藏  举报

导航

手机、游戏在线直充