2010-03-09 2 views
1

Cela devrait être assez simple pour un pro. J'ai des images dans la base de données du serveur sql et je veux les récupérer dans mon fichier aspx (vb.net). je en ASPX ce contrôle d'image - dans vb.net j'ai commencé ce code -afficher/récupérer l'image de la base de données sql dans vb.net

Private Sub ImageDisplay() 
    Dim SqlCnn As SqlConnection = Nothing, sql As String = "" 
    ConnectDB(SqlCnn) 
    Try 
     sql = "SELECT image FROM employees (NOLOCK) WHERE ID =" & emp_id 
     sqlcmd = New SqlCommand(sqlstr, SqlCnn) 
     Dim imageData As Byte() = DirectCast(sqlcmd.ExecuteScalar(), Byte()) 
     Dim newImage As Image = Nothing 
     If Not imageData Is Nothing Then 
      Using ms As New MemoryStream(imageData, 0, imageData.Length) 
       ms.Write(imageData, 0, imageData.Length) 
       newImage = Image.FromStream(ms, True) 
      End Using 
      image1.Image = newImage 
     End If 
    Catch ex As Exception 
     ReportError(ex) 
    Finally 
     CloseDB(SqlCnn) 
    End Try 
End Sub 

Je reçois erreur sur 2 places. - newImage = Image.FromStream (ms, vrai) - image1.Image = newImage Fromstream n'est pas membre de system.web.ui.webcontrols.image et une deuxième erreur Image n'est pas membre de system.web.ui .webcontrols.image

+0

personne ?? Cmon ça ne peut pas être aussi difficile !!! – ferdd

+0

Vous devez être un peu patient. Les gens vont répondre quand ils arrivent à voir votre question, ils ne sont pas assis autour de 24-7 juste en attente. – Guffa

+0

haha ​​np. Anywyas j'essaye ce code mais me tromper quelque part. laissez-moi éditer la question. – ferdd

Répondre

2

Vous avez besoin d'un objet de commande et d'un lecteur de données. Cependant, vous les mettez dans la mauvaise page.

Si vous vérifiez les propriétés du contrôle Image, vous verrez qu'il n'a aucune propriété Image, de sorte que vous ne pouvez pas charger une image et mettre dans le contrôle. La raison en est que vous ne pouvez pas envoyer à la fois la page et l'image dans la même réponse, au lieu que le navigateur doit demander l'image séparément lorsque la page se charge. Pour obtenir l'image de la base de données et l'afficher dans la page Web, vous avez besoin d'une page proxy séparée que vous pouvez utiliser pour obtenir uniquement les données d'image de la base de données. Pour obtenir l'image de la base de données, procédez comme suit. Dans la propriété ImageUrl du contrôle Image, vous devez mettre quelque chose comme "GetImage.ashx". Ensuite, vous créez un gestionnaire HTTP avec ce nom qui va juste obtenir les données d'image de la base de données et écrire dans le flux de réponse.

Exemple:

Private Sub HandleRequest(context as HttpContext) 
    Dim SqlCnn As SqlConnection = Nothing, sql As String 
    Dim emp_id As Integer 
    emp_id = Int32.Parse(context.Request.QueryString("id")) 
    ConnectDB(SqlCnn) 
    Try 
    sql = "SELECT image FROM employees (NOLOCK) WHERE ID =" & emp_id 
    sqlcmd = New SqlCommand(sqlstr, SqlCnn) 
    Dim imageData As Byte() = DirectCast(sqlcmd.ExecuteScalar(), Byte()) 
    context.Response.ContentType = "image/jpeg" 
    context.Response.BinaryWrite(imageData) 
    Catch ex As Exception 
    ReportError(ex) 
    Finally 
    CloseDB(SqlCnn) 
    End Try 
End Sub 
+0

avez-vous un exemple pour cela? code sage. Parce que je comprends le concept, mais ne sais pas comment écrire du code pour cela – ferdd

+0

@ferdd: J'ai ajouté un exemple ci-dessus. – Guffa

Questions connexes