0

この問題は以前に何百万回も投稿されていることは知っていますが、これは異なる場合があります。

列id、年、月、pdffileを持つSQLテーブルを使用しています

私の Web ページでは、ユーザーが選択した時間枠から見たい 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();

私が言ったように、それは現在のファイルを表示するために機能します。誰でもいくつかの提案を提供できますか? ハンドラーから Web ページにファイルがないというメッセージを送り返し、顧客にショックを与えずにそれを表示する方法はありますか?

前もって感謝します

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 に答える