3

在使用 DataTableReader 从 DataTable 读取数据后,我试图从 byte[] 数组创建 Excel 文件,所有这些都在 ashx 文件中。但它只是不工作。在这里我发布一些代码:

DataTableReader RS = dt.CreateDataReader();
byte[] byteArray = GetData(RS);

context.Response.ContentType = "application/ms-excel";
context.Response.Clear();

//  context.Response.Charset = "";
try
{
    context.Response.BinaryWrite(byteArray);
    context.Response.OutputStream.Write(byteArray, 0, byteArray.Length);
    context.Response.BufferOutput = true;
    context.Response.Flush();
 }
 catch (Exception ex)
 {
    SendMail(ex.Message.ToString());
 }

它抛出以下异常:

context.Response.SubStatusCode 引发了 System.PlatformNotSupportedException 类型的异常。{"此操作需要 IIS 集成管道模式。"} ashx

我知道如果我使用标头需要有 IIS7 或 Framework 3+。

任何帮助,将不胜感激!!

4

1 回答 1

0

您设置Response ContentType,然后Clear设置Response。然后你写了两次响应,这也很奇怪。我会改变它,我也会尝试调用End而不是Flush.

使其工作的最小代码量将类似于:

...
    DataTableReader RS = dt.CreateDataReader();             
    byte[] byteArray = GetData(RS);             

    try   
    {
        context.Response.Clear();
        context.Response.ContentType = "application/ms-excel";   
        context.Response.OutputStream.Write(byteArray, 0, byteArray.Length);       
        context.Response.End();    
    }    
    catch (Exception ex)    
    {       
        SendMail(ex.Message.ToString());    
    }
...
于 2012-10-19T16:59:32.793 回答