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

问题描述:

我是新来的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

+1

您正在将图像路径保存到数据库并试图将其作为blob。执行查询本身时它应该会爆炸。 – 2015-03-03 08:04:03

+0

什么行是你的错误原因我看到更多的潜在问题...... – Codexer 2015-03-03 08:06:25

+0

行Command.CommandText =“选择手指从扫描仪” – Ordiz 2015-03-03 08:36:13

要保存你可以做这样的事情

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

+0

错误代码:图像(Img = ScannerX_Pic.BackgroundImage)我不知道为什么。 错误消息:运算符'='未为类型System.Drawing.Image和System.Draw.Image定义 – Ordiz 2015-03-05 01:52:26

sql正在选择列n AMED“手指”:

"select Finger FROM Scanner" 

但它后来试图从一个名为“imagedate”栏目建立一个Image对象:

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

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

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

也可能还有其他问题,但这就是我马上跳出来的。