0

我知道这个问题之前已经发布了数百万次,但这可能会有所不同。

我正在使用带有列 id、year、month、pdffile 的 sql 表

在我的网页中,我希望用户从他们选择的时间范围内查看他们希望查看的 pdf 文档。

到目前为止:

string year = ddlYear.SelectedValue.ToString();    
string month = ddlMonth.SelectedValue.ToString();
pdfFrame.Attributes["src"] = "../pdfDocs.ashx?Year=" + year + "&Month=" + month;

它加载pdf,如果它在那里。那是我的问题。我如何在我的问题标题中发现错误?我想捕获该错误并在标签中向用户显示一条消息,说明未找到文件。我正在使用处理程序来读取我的 pdf 文件的 varbinary。

这是处理程序代码:

SqlConnection conn = new SqlConnection(@"Server=DEV6\MSSQLHOSTING;Database=Intranet;Trusted_Connection=True;");
conn.Open();
SqlCommand cmd = new SqlCommand("select PDFDocument from LeaveChart where (Year like @Year and Month like @Month)", conn);
cmd.Parameters.AddWithValue("Year", context.Request.QueryString["Year"]);
cmd.Parameters.AddWithValue("Month", context.Request.QueryString["Month"]);
SqlDataReader reader = cmd.ExecuteReader();

reader.Read();

byte[] content = (byte[])reader.GetValue(0);
MemoryStream ms = new MemoryStream(content);
ms.Position = 0;
context.Response.ContentType = "Application/pdf";
ms.WriteTo(context.Response.OutputStream);
context.Response.End();
reader.Close();
conn.Close();

就像我说的那样,它可以显示当前文件。谁能提供一些建议?是否可以从处理程序将消息发送回网页,说明没有文件以及如何在不震惊客户的情况下显示它?

提前致谢

4

1 回答 1

0

如果您可以更改 Handler 的签名,则:

public bool <YourHandlerName>(out MemoryStream ms)
{
SqlConnection conn = new SqlConnection(@"Server=DEV6\MSSQLHOSTING;Database=Intranet;Trusted_Connection=True;");
conn.Open();
SqlCommand cmd = new SqlCommand("select PDFDocument from LeaveChart where (Year like  @Year and Month like @Month)", conn);
cmd.Parameters.AddWithValue("Year", context.Request.QueryString["Year"]);
cmd.Parameters.AddWithValue("Month", context.Request.QueryString["Month"]);
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
ms = new MemoryStream(content);
if(reader.HasRows)
 {
  byte[] content = (byte[])reader.GetValue(0);
  ms.Position = 0;
  context.Response.ContentType = "Application/pdf";
  ms.WriteTo(context.Response.OutputStream);
  context.Response.End();
  reader.Close();
  conn.Close();
  return true;
 }
 return false;
}

我想我正确地回答了你的问题。

于 2013-03-28T14:48:55.693 回答