2013-06-27 2 views
-1

J'essaie de récupérer l'image de la base de données qui ont une colonne de type image en fait j'ai table d'une table je veux montrer l'image et d'une autre table je veux récupérer d'autres champs que j'utilise formulairehttp gestionnaire ne montrant pas l'image

fichier 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> 

code derrière:

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; 
     } 
    } 

Affiche les champs d'une table sans afficher l'image d'une autre table. . Où est-ce que je me trompe? Votre aide sera appréciée. . .Thanx

+0

D'abord, NE PAS UTILISER concaténation de chaînes dans les requêtes SQL –

+0

@kostasch: Ok., Mais vous s'il vous plaît me dire pourquoi il ne fonctionne pas – user2517610

+0

vérifier la taille de votre colonne imageContent dans db. – mck

Répondre

0

Vous devez utiliser que

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"]); 

Mais comme vous l'avez doit être avec des guillemets simples

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

Comme je l'ai dit dans mon commentaire NE PAS UTILISER concaténation de chaîne. Vous allez gagner beaucoup de choses. Mais je pense que votre problème est que vous essayez de mettre ImageUrl byte []. Il a juste besoin de chemin.

Voir cette http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.image.imageurl.aspx

Si vous voulez charger byte [] dans l'image suivre l'article ci-dessus. http://www.codeproject.com/Tips/445876/Auto-bind-byte-to-asp-Image

+0

Ok j'ai essayé cela mais toujours les mêmes résultats – user2517610

+0

Vous avez essayé lequel des 2 choix? –

+0

Vérifiez également la requête en db si elle retourne quelque chose. –