代码之家  ›  专栏  ›  技术社区  ›  madlan

在SQL数据库中存储多个图像

  •  1
  • madlan  · 技术社区  · 14 年前

    我正在尝试将表单(PictureBox)中的三个图像存储到SQL数据库(MSSQL2008) 我是编程新手,简化代码有点困难。 下面是我想要的,但显然是低效的。有没有关于如何改进的建议?

        Private Sub SaveImages()
    
        Dim ConStr As String = "Data Source=SERVER\SQL2008;Initial Catalog=NorthPole;Integrated Security=True"
        Dim con As New SqlConnection(ConStr)
        Dim sqlCommand As New SqlCommand()
        sqlCommand.Connection = con
        sqlCommand.CommandText = "INSERT INTO Items (ItemID, ItemNumber, ItemImage1, ItemImage2, ItemImage3) SELECT NEWID(), @ItemNumber, @ItemImage1, @ItemImage2, @ItemImage3"
    
        sqlCommand.Parameters.Add(New SqlParameter("@ItemNumber", SqlDbType.VarChar, 20)).Value = "MS1006"
    
        Dim ms1 As MemoryStream = New MemoryStream()
        PictureEdit1.Image.Save(ms1, System.Drawing.Imaging.ImageFormat.Jpeg)
        sqlCommand.Parameters.Add(New SqlParameter("@ItemImage1", SqlDbType.VarBinary)).Value = ms1.GetBuffer
    
        Dim ms2 As MemoryStream = New MemoryStream()
        PictureEdit2.Image.Save(ms2, System.Drawing.Imaging.ImageFormat.Jpeg)
        sqlCommand.Parameters.Add(New SqlParameter("@ItemImage2", SqlDbType.VarBinary)).Value = ms2.GetBuffer
    
        Dim ms3 As MemoryStream = New MemoryStream()
        PictureEdit3.Image.Save(ms3, System.Drawing.Imaging.ImageFormat.Jpeg)
        sqlCommand.Parameters.Add(New SqlParameter("@ItemImage3", SqlDbType.VarBinary)).Value = ms3.GetBuffer
    
        con.Open()
        sqlCommand.ExecuteNonQuery()
        con.Close()
    
    End Sub
    
    
    
    Private Sub LoadImages()
    
        Dim ConStr As String = "Data Source=SERVER\SQL2008;Initial Catalog=NorthPole;Integrated Security=True"
        Dim con As New SqlConnection(ConStr)
        con.Open()
        Dim sqlCommand As New SqlCommand()
        sqlCommand.Connection = con
    
        sqlCommand.CommandText = "SELECT ItemImage1 FROM items WHERE ItemNumber = 'MS1006'"
        Dim buffer1 As Byte() = sqlCommand.ExecuteScalar()
        Dim ms1 As MemoryStream = New MemoryStream(buffer1)
        PictureEdit1.Image = Image.FromStream(ms1)
    
        sqlCommand.CommandText = "SELECT ItemImage2 FROM items WHERE ItemNumber = 'MS1006'"
        Dim buffer2 As Byte() = sqlCommand.ExecuteScalar()
        Dim ms2 As MemoryStream = New MemoryStream(buffer2)
        PictureEdit2.Image = Image.FromStream(ms2)
    
        sqlCommand.CommandText = "SELECT ItemImage3 FROM items WHERE ItemNumber = 'MS1006'"
        Dim buffer3 As Byte() = sqlCommand.ExecuteScalar()
        Dim ms3 As MemoryStream = New MemoryStream(buffer3)
        PictureEdit3.Image = Image.FromStream(ms3)
    
        con.Close()
    
    End Sub
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   Will A    14 年前

    一个简单的步骤,以减少重复-有一个功能,让您的字节为您的JPG。。。

    Private Function GetJpegBytesForImage(theImage As Image) As Byte()
        Using ms As MemoryStream = New MemoryStream()
          theImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
          Return ms.GetBuffer()
        End Using
    End Function
    

    ……反过来也是一样。。。

    Private Function GetImageForJpegBytes(theBytes As Byte()) As Image
        Using ms As MemoryStream = New MemoryStream(theBytes)
          return Image.FromStream(ms)
        End Using
    End Function