我正在尝试使用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 +。
任何帮助都将不胜感激!!
答案 0 :(得分: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());
}
...
答案 1 :(得分:0)
你为excel文档添加了MIME类型吗?另外,请查看这篇文章 Setting mime type for excel document