我知道此问题之前已经发布了数百万次,但这可能会有所不同。
我正在使用带有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();
像我说的那样,它可以显示当前文件。谁能提供一些建议?
是否有可能将处理程序中的消息发送回网页,说明没有文件以及如何显示它而不会让客户感到震惊?
提前致谢
答案 0 :(得分:0)
如果您可以更改处理程序的签名,则:
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;
}
我想我的问题是正确的。