无法在图像控制中显示图像

时间:2013-03-05 11:40:26

标签: asp.net

它是我的处理程序(.ashx)

    Dim EmployeeID As Integer
If (Not (context.Request.QueryString("EmployeeID")) Is Nothing) Then EmployeeID = Convert.ToInt32(context.Request.QueryString("EmployeeID")) 
Else Throw New ArgumentException("No parameter specified") End If 
Dim imageData() As Byte = {}
' get the image data from the database using the employeeId Querystring context.Response.ContentType = "image/jpeg" 
  context.Response.BinaryWrite(imageData)

一切正常。只有imageData长度为0,因此图像无法显示。

@Sean:它的elsewhr ..这里查询字符串正确地传递了employeeid ...

以下是数据库访问的代码:

    Public Sub bind()

    Dim ds1 As New DataSet()
    Dim con As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionString").ToString)
    con.Open()
    Dim query As String = "select * from EmployeeTable"
    Dim cmd As New SqlCommand()
    Dim da1 As New SqlDataAdapter(query, con)
    da1.Fill(ds1, "EmployeeTable")
    GridView1.DataSource = ds1.Tables("EmployeeTable")
    GridView1.DataBind()
    con.Close()
End Sub

2 个答案:

答案 0 :(得分:1)

您正在将大量数据加载到GridView,但没有任何内容加载到您的imageData变量中。所以我们只需连接到数据库并将数据拉出来。我假设您的图片列名为imageData,但请根据需要进行更改。

Dim EmployeeID As Integer

If (Not (context.Request.QueryString("EmployeeID")) Is Nothing) Then

    EmployeeID = Convert.ToInt32(context.Request.QueryString("EmployeeID")) 

Else

    Throw New ArgumentException("No parameter specified")

End If 

Dim imageData() As Byte = {}

' get the image data from the database using the employeeId Querystring

Using con As New SqlConnection(ConfigurationManager.AppSettings("ConnectionString"))

    Using cmd As New SqlCommand("SELECT imageData FROM EmployeeTable WHERE EmployeeID = @EmployeeID", con) 'select imageData column, change column name as appropriate

        cmd.Parameters.AddWithValue("@EmployeeID", EmployeeID)

        Try

            con.Open()

            Using rdr As SqlDataReader = cmd.ExecuteReader()

                If rdr.Read() Then

                    imageData = CType(rdr("imageData"), Byte()) 'convert imageData column from result set to byte array and assign to variable

                End If

            End Using

        Catch ex As Exception

            'do any error handling here

        End Try

    End Using

End Using

context.Response.ContentType = "image/jpeg"
context.Response.BinaryWrite(imageData)

答案 1 :(得分:0)

将处理程序中的代码更改为:

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest


    Dim EmployeeID As Integer

    If (Not (context.Request.QueryString("EmployeeID")) Is Nothing) Then

        EmployeeID = Convert.ToInt32(context.Request.QueryString("EmployeeID"))

    Else

        Throw New ArgumentException("No parameter specified")

    End If

    Dim Image() As Byte = {}

    ' get the image data from the database using the employeeId Querystring

    Dim con As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionString").ToString)

    Dim cmd As New SqlCommand("SELECT Image FROM EmployeeTable WHERE EmployeeID = @EmployeeID", con)
    'select imageData column, change column name as appropriate

    cmd.Parameters.AddWithValue("@EmployeeID", EmployeeID)

    Try

        con.Open()

        Dim rdr As SqlDataReader = cmd.ExecuteReader()

        While rdr.Read()


            Image = CType(rdr("Image"), Byte())
            'convert imageData column from result set to byte array and assign to variable
        End While

    Catch ex As Exception

        'do any error handling here

    End Try

    context.Response.ContentType = "image/jpeg"
    context.Response.BinaryWrite(Image)

End Sub

为我工作,也许它也适合你......