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

时间:2010-03-09 23:42:02

标签: database vb.net image

这对于专业人士来说应该非常简单。我在sql server数据库中有图像,我想在我的aspx(vb.net)文件中检索它们。 我在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

我在2个地方收到错误。 - newImage = Image.FromStream(ms,True) - image1.Image = newImage Fromstream不是system.web.ui.webcontrols.image的成员 和第二个错误图像不是system.web.ui.webcontrols.image

的成员

2 个答案:

答案 0 :(得分:2)

您需要命令对象和数据读取器。但是,您将它们放在错误的页面中。

如果您查看Image控件的属性,您将看到它没有任何Image属性,因此您无法加载图像并置于控件中。原因是你不能在同一个响应中发送页面和图像,而是浏览器必须在页面加载时单独请求图像。

要从数据库中获取图像并在网页中显示,您需要一个单独的代理页面,您可以使用该页面仅从数据库中获取图像数据。在ImageUrl控件的Image属性中,您可以添加"GetImage.ashx"之类的内容。然后你创建一个具有该名称的HTTP处理程序,它只从数据库中获取图像数据并写入响应流。

示例:

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

答案 1 :(得分:1)

$(".contact-us-campus select").change(function() {
        $(this).find("option:selected").each(function() {
            var optionValue = $(this).attr("value");
            if (optionValue) {
                $(".select-box").not("." + optionValue).hide();
                $("." + optionValue).show();
                $('.regular').slick('refresh');

            } else {
                $(".select-box").hide();
            }
        });
    }).change();

    if ($('.regular').length) {
        $('.regular').slick({
            infinite: false,
            slidesToShow: 4,
            slidesToScroll: 1,
            prevArrow: '<button type="button" class="slick-prev"><img src="/_assets/images/arrow-left.svg" alt="previous arrow icon"></button>',
            nextArrow: '<button type="button" class="slick-next"><img src="/_assets/images/arrow-right.svg" alt="next arrow icon"></button>',
            responsive: [{
                breakpoint: 2360,
                settings: {
                    slidesToShow: 3
                }
            }, {
                breakpoint: 769,
                settings: {
                    slidesToShow: 2
                }
            }, {
                breakpoint: 576,
                settings: {
                    centerMode: false,
                    slidesToShow: 1,
                    slidesToScroll: 1,
                    adaptiveHeight: false
                }
            }]
        }).on('setPosition', function(event, slick) {
            slick.$slides.css('height', slick.$slideTrack.height() + 'px');
        });
    }