Hi guys,
I have recently been teacing myself .NET C# and i am currently working on a project to create an ecommerce site just as a learning experience more than anything.
I have created most of the site already however i have came accross with creating the product list (Gallery).
I would like to have a list of the products in my database to show on the screen with an image of each product. I have tried to do this several ways with no success. Below shows how my database is set out and also shows the code i am using. The problem i am having is showing the images of each product. I think the reason the image is not showing is due to the fact that i am creating the <asp:Image> tag in the code behind so therefore this can not pick up my Image Handler. IT will make more sence when you see my code:
Microsoft SQL Server [U][B]Database:[/B][/U]
[B]Product[/B]Product_id - Numericname - VarcharDescr - VarcharPrice - VarcharQuantity - NumericBrand - VarcharGender - VarcharImage - Image
[U][B]Code:[/B][/U]
[B]Products.aspx.cs[/B]
[CODE]
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;using System.Data.SqlClient;using System.Web.Configuration;using System.IO;
namespace WebApplication1{ public partial class Products : System.Web.UI.Page {
string connectionString = WebConfigurationManager.ConnectionStrings["Test_1"].ConnectionString;
#region LoadProducts protected void Page_Load(object sender, EventArgs e) {
/* SqlConnection conn = new SqlConnection(connectionString); conn.Open();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Product", conn); DataTable dt = new DataTable(); da.Fill(dt); conn.Close();
listView.DataSource = dt; listView.DataBind(); */
lblResult.Text = "";
// Create a Select statement that searches for a record // matching the specific author ID from the Value property. string selectSQL; selectSQL = "SELECT * FROM Product "; selectSQL += "WHERE Gender=@Gender"; // Define the ADO.NET objects. SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(selectSQL, con); SqlDataReader reader;
cmd.Parameters.AddWithValue("@Gender ", lstProducts.Text); // Try to open database and read information. try {
con.Open(); reader = cmd.ExecuteReader(); while (reader.Read()) {
// Build a string with the record information, // and display that in a label. System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("<b>"); sb.Append(reader["name"]); sb.Append("</b><br /> "); sb.Append("Description: "); sb.Append(reader["Descr"]); sb.Append("<br />"); sb.Append("Price: "); sb.Append(reader["Price"]); sb.Append("<br />"); sb.Append("Quantity: "); sb.Append(reader["Quantity"]); sb.Append("<br />"); sb.Append("Brand: "); sb.Append(reader["Brand"]); sb.Append("<br />"); sb.Append("Gender: "); sb.Append(reader["Gender"]); sb.Append("<asp:Image ID='test' runat='server' ImageUrl='~/ImgHandler.ashx?id="+ reader["Product_id"].ToString() +"' />"); sb.Append("<br />"); sb.Append("<br />");
lblResult.Text += sb.ToString(); } reader.Close();
} catch (Exception err) { lblResult.Text = "Error getting author. "; lblResult.Text += err.Message; } finally { con.Close(); }
} #endregion #region Fill_Dropdown private void FillProductList() {
string selectSQL = "SELECT name, Price, Product_id FROM Product"; SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(selectSQL, con); SqlDataReader reader;
// Try to open database and read information. try { con.Open(); reader = cmd.ExecuteReader(); // For each item, add the author name to the displayed // list box text, and store the unique ID in the Value property. while (reader.Read()) { ListItem newItem = new ListItem(); newItem.Text = reader["name"] + ", " + reader["Price"]; newItem.Value = reader["Product_id"].ToString(); lstProducts.Items.Add(newItem); } reader.Close(); } catch (Exception err) { lblResult.Text = "Error reading list of names. "; lblResult.Text += err.Message; } finally { con.Close(); }
}
#endregion
}}
[/CODE]
[B]ImgHandler.ashx[/B]
[CODE]using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;using System.Data.SqlClient;using System.Web.Configuration;using System.IO;using System.Configuration;
namespace WebApplication1{ /// <summary> /// Summary description for ImgHandler /// </summary> public class ImgHandler : IHttpHandler { string connectionString = WebConfigurationManager.ConnectionStrings["Test_1"].ConnectionString;
public void ProcessRequest(HttpContext context) { Int32 prodno; if (context.Request.QueryString["id"] != null) prodno = Convert.ToInt32(context.Request.QueryString["id"]); else throw new ArgumentException("No parameter specified");
context.Response.ContentType = "image/jpeg"; Stream strm = ShowProdImage(prodno); byte[] buffer = new byte[4096]; int byteSeq = strm.Read(buffer, 0, 4096);
while (byteSeq > 0) { context.Response.OutputStream.Write(buffer, 0, byteSeq); byteSeq = strm.Read(buffer, 0, 4096); } //context.Response.BinaryWrite(buffer);
public Stream ShowProdImage(int prodno) {
SqlConnection con = new SqlConnection(connectionString);
string sql = "SELECT Image FROM Product WHERE Product_id = @ID"; SqlCommand cmd = new SqlCommand(sql, con); cmd.CommandType = CommandType.Text; cmd.Parameters.AddWithValue("@ID", prodno); con.Open(); object img = cmd.ExecuteScalar(); try { return new MemoryStream((byte[])img); } catch { return null; } finally { con.Close(); } }
public bool IsReusable { get { return false; } }
}}[/CODE]