4

イメージのバイトを返す SQL Server データベースがあります。tableadapter ウィザードを使用してストアド プロシージャとプレビュー データに設定すると、画像が表示されます。プレビューデータの画像に自動的に変換します。Int の文字列などとは見なされません。

gridviewとobjectdatasourceを使用してasp.net Webページに表示するにはどうすればよいですか?

イメージフィールドがバイト変換を行う別のページの URL を指すことができる場所を検索して見つけましたが、それが最適かどうかはわかりません。一時ファイルを作成する別の方法を見つけました。

それを行うための最良の方法を見ようとしているだけです。

編集 - 一時ファイルを使用しないようにしています。グリッドビューを使用できない場合は、通常の画像フィールドで問題ありません。

asp.net 2.0、c#.

助けてくれてありがとう。

編集

最終的に:

   protected void Page_Load(object sender, EventArgs e)
    {
        string id = Request["id"];
        string connstr = "DSN=myserver";
        OdbcConnection conn = new OdbcConnection(connstr);
        OdbcCommand cmd = new OdbcCommand("{call mySP (?)}", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        // Add the input parameter and set its properties.
        OdbcParameter parameter = new OdbcParameter();
        parameter.ParameterName = "@MyParam";
        parameter.OdbcType = OdbcType.VarChar;
        parameter.Direction = ParameterDirection.Input;
        parameter.Value = id;

        // Add the parameter to the Parameters collection. 
        cmd.Parameters.Add(parameter);
        conn.Open();
        OdbcDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            byte[] buffer = (byte[])dr[0];
            Response.ContentType = "image/jpg";
            Response.BinaryWrite(buffer);
            Response.Flush();
        }
    }

そしてこれは呼び出しページにあります:

<asp:Image ID="Image1" ImageAlign="Middle" ImageUrl="show.aspx?id=123" Runat="server" />
4

4 に答える 4

4

2 つのオプション:

一時ファイルを作成する - このアプローチの問題は、ファイルを作成する必要があることです。つまり、Web にはディレクトリへの書き込みアクセスが必要ですが、これはあまり良いことではありません。また、画像をクリーンアップする方法も必要です。

別の URL から提供する - ディスク アクセスが不要なため、これが私の推奨する方法です。シンプルな http ハンドラー (ashx) は、画像を提供する優れた方法です。

編集

ashx でセッション状態が必要な場合は、Asp.net System.Web.HttpContext.Current.Session null in global.asaxを確認してください。

編集

さらに考えてみましょう。一時ファイルを使用した方がよい場合もあります。たとえば、画像が多くのユーザーから頻繁にリクエストされる場合などです。次に、ファイルを一度書き込むことができるため、イメージをディスクに保存することは理にかなっています。これにより、メンテナンスの複雑さが増しますが、トラフィックによっては、.net スタックへのコールバックを回避し、IIS を活用できるため、価値がある場合があります。静的コンテンツのキャッシング。

于 2009-03-04T20:48:04.200 に答える
0

追加したサンプル コードは適切ですが.ashx、そのようなことを目的としたファイルに移動する必要があります。

于 2009-03-04T22:56:08.650 に答える
0

オープンソースの ImageResizing.Net ライブラリ用のSqlReaderプラグインを作成して、最もパフォーマンスが最適な方法で SQL データベースから画像を提供および表示できるようにしました。

画像処理をまったく行う必要がない場合でも、(a) 最も簡単で、(b) 最も効率的な方法です。これをディスク キャッシング (自動クリーンアップを提供) と組み合わせて、可能な限り最高のパフォーマンスを得ることができます。

インストールは簡単です。2 つの nuget コマンドを使用するか、コピーして Web.Config に貼り付けます。

サポートが必要な場合は、無料で迅速なサポートをご利用いただけます。

于 2011-12-01T03:21:40.977 に答える
-1

これを行う方法のサンプルコードを次に示します

于 2009-03-04T20:46:19.570 に答える