简体   繁体   English

从vb.net中的sql数据库显示/检索图像

[英]display/retrieve image from sql database in vb.net

This should be pretty simple for a pro. 对于专业人士来说,这应该很简单。 I have images in sql server database and I want to retrieve them in my aspx (vb.net) file. 我在sql server数据库中有图像,我想在我的aspx(vb.net)文件中检索它们。 I have in aspx this image control - in vb.net i have started this code - 我在aspx中有此图片控件-在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

I am getting error on 2 places. 我在2个地方出错。 - newImage = Image.FromStream(ms, True) - image1.Image = newImage Fromstream is not a member of system.web.ui.webcontrols.image and second error Image is not a member of system.web.ui.webcontrols.image -newImage = Image.FromStream(ms,True)-image1.Image = newImage Fromstream不是system.web.ui.webcontrols.image的成员,第二个错误Image不是system.web.ui.webcontrols.image的成员

You need both a command object and a data reader. 您需要一个命令对象和一个数据读取器。 However, you are putting them in the wrong page. 但是,您将它们放在错误的页面中。

If you check out the properties of the Image control you will see that it doesn't have any Image property, so you can't load an image and put in the control. 如果您检出Image控件的属性,则会看到它没有任何Image属性,因此您无法加载图像并将其放入控件中。 The reason for that is that you can't send both the page and the image in the same response, instead the browser has to request the image separately when the page loads. 这样做的原因是您不能在同一响应中同时发送页面和图像,而是在页面加载时浏览器必须单独请求图像。

To get the image from the database and show in the web page you need a separate proxy page that you can use to get only the image data from the database. 要从数据库获取图像并显示在网页中,您需要一个单独的代理页面,您可以使用该页面仅从数据库获取图像数据。 In the ImageUrl property of the Image control you would put something like "GetImage.ashx" . Image控件的ImageUrl属性中,您将放置类似"GetImage.ashx" Then you make an HTTP handler with that name that will just get the image data from the database and write to the response stream. 然后,使用该名称创建一个HTTP处理程序,该处理程序将从数据库中获取图像数据并将其写入响应流。

Example: 例:

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
Dim cn As SqlConnection

    cn = New SqlConnection
    cn.ConnectionString = "Data Source=UMAR\UMAR;Initial Catalog=DMCHS;Integrated Security=True"

    Dim cmd As New System.Data.SqlClient.SqlCommand("select D1 from DBFile where mem_no=2")
    cmd.Connection = cn
    cmd.CommandType = CommandType.Text

    Dim ImgStream As New IO.MemoryStream(CType(cmd.ExecuteScalar, Byte()))

    PictureBox1.Image = Image.FromStream(ImgStream)

    ImgStream.Dispose()

    cmd.Connection.Close()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM