将图像从数据库加载到图片框

时间:2015-03-03 08:01:45

标签: sql vb.net

我是visual basic的新手,我在从数据库加载图像时遇到问题。我目前正在使用图像数据类型。这是我保存图像的方式

Imports System.Data
Imports System.Data.SqlClient

Public Class ScannerX_Add
    Dim ImageFilename As String
    Dim ImageUpload As Image
    Private Sub ButtonX1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Scan.Click

        Try
            OpenFileDialog1.Title = "Please Select a File"
            OpenFileDialog1.InitialDirectory = "C:\Users\ITTestServer\Desktop\Dekstop\"
            OpenFileDialog1.ShowDialog()
            ScannerX_Pic.Image = Image.FromFile(OpenFileDialog1.FileName)
            ImageFilename = OpenFileDialog1.FileName
            ImageUpload = Image.FromFile(OpenFileDialog1.FileName)
        Catch ex As Exception
            MsgBox("Please insert scan finger")
            Exit Sub
        End Try
    End Sub



    Private Sub Btn_Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Save.Click
        If ImageFilename <> "" Then

            Dim imageNameTemp As String
            imageNameTemp = ImageFilename
            While (imageNameTemp.Contains("\"))
                imageNameTemp = imageNameTemp.Remove(0, imageNameTemp.IndexOf("\") + 1)
            End While
            Dim ms As New IO.MemoryStream
            If ImageFilename.Contains("jpeg") Or ImageFilename.Contains("jpg") Then
                ImageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
            End If
            If ImageFilename.Contains("png") Then
                ImageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
            End If
            If ImageFilename.Contains("gif") Then
                ImageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
            End If
            If ImageFilename.Contains("bmp") Then
                ImageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp)
            End If
            Dim b() As Byte = ms.ToArray()
            Dim cmd As New SqlCommand("Insert into Scanner (Name,Finger) VALUES('" & TxtBox_Name.Text.Trim & "','" & imageNameTemp & "')", Connection)
            cmd.Parameters.Add("@BLOBData", SqlDbType.Image, b.Length).Value = b
            cmd.ExecuteNonQuery()
            MsgBox("Profile Has Been Saved")
            Me.Close()
        End If
    End Sub

现在我需要将我的图片加载到当前为主窗体的picturebox

Private Sub ButtonX1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonX1.Click
        Command.CommandText = ("select Finger FROM Scanner")


        Command.Connection = Connection
        Dim da As New SqlDataAdapter(Command)
        Dim ds As New DataSet()
        da.Fill(ds, "projectimages")
        Dim c As Integer = ds.Tables(0).Rows.Count
        If c > 0 Then
            Dim bytBLOBData() As Byte = _
                ds.Tables(0).Rows(c - 1)("imagedate")
            Dim stmBLOBData As New MemoryStream(bytBLOBData)
            ScannerX_Pic2.Image = Image.FromStream(stmBLOBData)
        End If
    End Sub

现在我收到错误Object reference not set to an instance of an object

2 个答案:

答案 0 :(得分:3)

要保存图像,您可以执行以下操作

Dim sql As String = "INSERT INTO Information VALUES(@name,@photo)"
            Image Img = PictureBox1.BackgroundImage
            Dim cmd As New SqlCommand(sql, con)
            cmd.Parameters.AddWithValue("@name", TextBox1.Text)
            Dim ms As New MemoryStream()
            Img.Save(ms, Img.RawFormat)
            Dim data As Byte() = ms.GetBuffer()
            Dim p As New SqlParameter("@photo", SqlDbType.Image)
            p.Value = data
            cmd.Parameters.Add(p)
            cmd.ExecuteNonQuery()

并检索图像

cmd = New SqlCommand("select photo from Information where name='Rose'", con)
    Dim imageData As Byte() = DirectCast(cmd.ExecuteScalar(), Byte())
    If Not imageData Is Nothing Then
        Using ms As New MemoryStream(imageData, 0, imageData.Length)
            ms.Write(imageData, 0, imageData.Length)
            PictureBox1.BackgroundImage = Image.FromStream(ms, True)
        End Using

同时查看这篇文章,它正是你正在努力实现的目标

http://www.codeproject.com/Articles/437937/Save-and-Retrieve-Image-from-a-SQL-Server-Database

答案 1 :(得分:0)

sql正在选择一个名为“Finger”的列:

"select Finger FROM Scanner"

但是后来它试图从名为“imagedate”的列构建一个Image对象:

ds.Tables(0).Rows(c - 1)("imagedate")

它需要使用与SQL结果集相同的列名:

ds.Tables(0).Rows(c - 1)("Finger")

也可能存在其他问题,但这就是马上跳出来的。