http处理程序没有显示图像

时间:2013-06-27 05:24:54

标签: c# asp.net sql-server

我试图从具有类型图像列的数据库中检索图像实际上我有一个表中的表我要显示图像而另一个表我想要检索其他字段我正在使用表单视图

aspx文件

<asp:FormView runat="server" ID="ListStories" DefaultMode="ReadOnly" >
<ItemTemplate>
<table>
<tr><td><%#Eval("Subject") %></td></tr>
<tr><td><%#Eval("Story") %></td></tr>
<tr><td><%#Eval("UserName")%> <asp:Image ID="Image1" runat="server" ImageUrl='~/ShowImage.ashx?Name=<%#Eval("UserName") %>' Width="150" Height="150" /></td></tr>

</table>
</ItemTemplate>


</asp:FormView>

代码背后:

string connString = ConfigurationManager.ConnectionStrings["Alumnidb"].ConnectionString;
    SqlConnection conn;
    SqlCommand cmdStories;
    SqlDataReader reader;


    protected void Page_Load(object sender, EventArgs e)
    {
        RetriveStories();

    }

    protected void RetriveStories()
    {

        conn = new SqlConnection(connString);
        //cmdStories = new SqlCommand("SELECT Stories.UserName, Stories.Subject, Stories.Story, UserProfile.Photo FROM Stories INNER JOIN UserProfile ON UserProfile.UserName=Stories.UserName", conn);
        cmdStories = new SqlCommand("SELECT UserName, Subject, Story FROM Stories",conn);
        conn.Open();
        reader = cmdStories.ExecuteReader();


        ListStories.DataSource = reader;
        ListStories.DataBind();

        conn.Close();

    }

HttpHandler的:

public void ProcessRequest (HttpContext context) {
        byte[] buffer = null;
        string querySqlStr = "";
        if (context.Request.QueryString["Name"] != null)
        {
            querySqlStr = "SELECT Photo from UserProfile where UserName=" + context.Request.QueryString["Name"];
        }

        conn = new SqlConnection(connString);
        SqlCommand command = new SqlCommand(querySqlStr, conn);
        SqlDataReader reader = null;
        try
        {
            conn.Open();
            reader = command.ExecuteReader();
            //get the extension name of image
            while (reader.Read())
            {
                string name = reader["Photo"].ToString();
                int endIndex = name.LastIndexOf('.');
                string extensionName = name.Remove(0, endIndex + 1);
                buffer = (byte[])reader["imageContent"];
                context.Response.Clear();
                context.Response.ContentType = "image/" + extensionName;
                context.Response.BinaryWrite(buffer);
                context.Response.Flush();
                context.Response.Close();
            }
            reader.Close();

        }
        finally
        {
            conn.Close();
        }
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

它显示一个表中的字段,但不显示另一个表中的图像。 。 我哪里错了? 我们将不胜感激。 。 .Thanx

1 个答案:

答案 0 :(得分:0)

你应该使用那个

 if (context.Request.QueryString["Name"] != null)
    {
        querySqlStr = "SELECT Photo from UserProfile where UserName= @username" ;

    }

    conn = new SqlConnection(connString);
    SqlCommand command = new SqlCommand(querySqlStr, conn);.
    command.Parameters.Add("@username",context.Request.QueryString["Name"]);

但是你必须使用单引号

querySqlStr = "SELECT Photo from UserProfile where UserName='" + context.Request.QueryString["Name"] + "'";

正如我在评论中所说,不要使用字符串连接。你将获得很多东西。 但我认为你的问题是你试图输入ImageUrl byte []。它只需要路径。

请参阅此http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.image.imageurl.aspx

如果要在图像中加载byte [],请按照上面的文章进行操作。 http://www.codeproject.com/Tips/445876/Auto-bind-byte-to-asp-Image