So I've read many forums that explained how to get an image out of SQL Server database and display it. I used an alternate .aspx page to retrieve the image and write it back as binary which everyone on many sites said to do. The problem is its not working.
My exact situation is that I am creating News Articles based on news entries which are either text or pictures. I want to display a picture in the datagrid if there is one. Currently I get the red box with the x for everything (even when there is supposed to be a picture!!!)
I'm Using C# and ASP.NET 1.1
my datagrid has this kind of column for it:
Expand|Select|Wrap|Line Numbers
- <asp:TemplateColumn>
- <ItemTemplate>
- <table align="center" width="100%">
- <tr>
- <td class="newstext"><%# DataBinder.Eval(Container.DataItem, "theText")%></td>
- </tr>
- <!-- <tr>
- <td><img src="getImage.aspx?ID=<%# DataBinder.Eval(Container.DataItem, "imageID") %>&type=<%# DataBinder.Eval(Container.DataItem, "contentType") %>" id="Img1" /></td>
- </tr> -->
- </table>
- </ItemTemplate>
- </asp:TemplateColumn>
Expand|Select|Wrap|Line Numbers
- if(Request.QueryString["type"].ToString().Equals("picture"))
- {
- System.Data.SqlClient.SqlDataReader Reader=null;
- string ImageIdentity = Request.QueryString["ID"].ToString();
- SqlConnection sqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["Connection"]);
- sqlConnection.Open();
- SqlCommand sqlCommand = new SqlCommand("Select theImage from TAPSite.dbo.NewsImages where imageID="+ImageIdentity ,sqlConnection);
- Reader= sqlCommand.ExecuteReader(CommandBehavior.CloseConnection);
- Reader.Read();
- byte [] byteArray = (byte[]) Reader["theImage"];
- Response.ContentType=Reader["imageType"].ToString();
- Response.BinaryWrite(byteArray);
- sqlConnection.Close();
- }
- else
- {
- System.Web.UI.WebControls.Image spacer = new System.Web.UI.WebControls.Image();
- spacer.ImageUrl = "spacer.gif";
- ImageConverter ic = new ImageConverter();
- Response.ContentType= "image/gif";
- // Byte[] imageByteArray = (byte[]) converter.ConvertTo(im, typeof(byte[]));
- byte[] spaceArray = (byte[])ic.ConvertTo(spacer, typeof(byte[]));
- Response.BinaryWrite(spaceArray);
- }
and finally my ItemDataBound function for my datagrid has this code in it :
Expand|Select|Wrap|Line Numbers
- if((e.Item.ItemType != ListItemType.Header) && (e.Item.ItemType != ListItemType.Footer))
- {
- if(e.Item.Cells[1].Equals("picture"))
- {
- System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
- img.ImageUrl = "getImage.aspx?ID=" + e.Item.Cells[5] + "&type=picture";
- e.Item.Controls.Add(img);
- }
- else if(e.Item.Cells[1].Equals("text"))
- {
- }
- }
Thanks,
-Mike