-2

イメージ データを SQL Server データベース テーブルに格納しています。これは私のテーブル構造です

create table userimages
(ID integer identity(1,1),
boardingpass varbinary(max));
go

ユーザーが有効なユーザーかどうかを確認した後、out パラメータを使用して画像を返すストアド プロシージャを作成しました。

alter procedure return_userimage(@firstname char(100) , @lastname char(100), @imagedata varbinary(max) out)
 as
 begin
    declare @result int

    exec @result = usp_validatuser @firstname, @lastname

    if(@result = 1)
    begin
       declare @userid int

       select @userid = ID 
       from tbl_UserInformation 
       where FirstName = @firstname and LastName = @lastname

       select @imagedata = boardingpass 
       from userimages 
       where ID = @userid 
    end
  else
  begin
     return 0
  end
end

イメージを取得し、ASP イメージ コントロールを使用して表示したいと考えています。ストアド プロシージャを呼び出し、c#、ASP を使用して画像を表示するために必要なコードをガイドしてください。

ありがとう

4

1 に答える 1

2

最初に考慮すべき点がいくつかあります - 画像の種類 (png、bmp、tiff のいずれか) を保存することです。私はすべてがjpegになると仮定しました。そして、おそらく ASP.NET の基本について何かを学んでください。たとえば、データベースへの接続を開く方法を知っていることを心から願っています。

HttpHandler を作成する必要があります。これを Web アプリケーションのルートで ImageHandler.ashx と呼びましょう。

コードは次のとおりです。

public class ImageHandler : IHttpHandler {
  public bool IsReusable {
    get { return false; }
  }

  public void ProcessRequest(HttpContext context) {
    string firstName = context.Request.QueryString["FirstName"];
    string lastName = context.Request.QueryString["LastName"];
    context.Response.ContentType = "image/jpeg";

    using (var conn = new SqlConnection(@"SERVER=.\SQL2008;Database=Test;Integrated Security=True")) 
    {
      using(var cmd = new SqlCommand("return_userimage", conn))
      {
        cmd.Parameters.Add("@firstname", SqlDbType.Char, 100).Value = firstName;
        cmd.Parameters.Add("@lastname", SqlDbType.Char, 100).Value = lastName;
        var paramImage = cmd.Parameters.Add("@imagedata", SqlDbType.VarBinary);
        paramImage.Direction = ParameterDirection.Output;
        conn.Open();
        cmd.ExecuteNonQuery();
        if (paramImage.Value != null && paramImage.Value != DBNull.Value) {
          byte[] buffer = (byte[])paramImage.Value;
          context.Response.OutputStream.Write(buffer, 0, buffer.Length);
        }
      }
    }
  }
}

これは画像を提供します。次に、.aspx または .ascx ページに次のように配置できます。

<asp:Image runat="server" 
  ImageUrl="~/ImageHandler.ashx?FirstName=John&LastName=Smith" />

これにより、名が「John」、姓が「Smith」の画像ハンドラーが呼び出されます。画像ハンドラーは、画像を表すバイトを提供します。

于 2013-07-10T15:33:39.750 に答える