如何以最小的数据库空间从 VB.NET win 表单应用程序将图像存储在 MS SQL Server 数据库中?

编程


你好!
祝大家美好的一天,

我有一个 VB.Net windows 窗体项目,使用 MS SQL Server 作为后端数据库。 我正在将应用程序中的图像存储到数据库中。 这是客户所要求的,例如当用户发布付款凭证时,他需要存储一些手动文档作为交易的支持证明。 一切都很顺利。 图像可以完美地存储和检索。 但正因为如此,数据库的大小增长远远超出了预期。
现在我想知道如何才能尽可能少地占用数据库存储来执行相同的任务。

如果有人可以在这方面提供帮助,我将非常感激。

感谢致敬。

我尝试过的:

首先,我使用 OpenFileDialog 通过窗口浏览在 PictureBox 控件中插入图片。

Public Sub Select_Picture()
     Try
         OpenFile.ShowDialog()
         Dim PicPath As String = OpenFile.FileName
         MyPicBox.ImageLocation = PicPath
     Catch ex As Exception
         MessageBox.Show(ex.Message)
     End Try
End Sub

然后为了存储图像,我使用以下代码。

  Public Sub SaveImage_()
        Dim SQL_Connection As New SqlConnection
        Try
            Dim MyImage As Image
            MyImage = MyPicBox.Image
            SQL_Connection.ConnectionString = MyConnectionString
            SQL_Connection.Open()
            Dim MyQuery As String = "insert into tbl_Setup_Companies Values(@Image_)"
            Dim MyCommand As SqlCommand
            MyCommand = New SqlCommand(MyQuery, SQL_Connection)
            MyCommand.Parameters.Add(New SqlParameter("@Image_", SqlDbType.Image))
            MyCommand.Parameters("@Image_").Value = ConvertImage(MyImage)
            MyCommand.ExecuteNonQuery()
            SQL_Connection.Close()
Catch ex As Exception
  MessageBox.Show(ex.Message)
End Try
End Sub

为了将图像转换为字节,我编写了一个名为“ConvertImate”的函数

Public Function ConvertImage(ByVal myImage As Image) As Byte()
        Dim mstream As New MemoryStream
        myImage.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
        Dim myBytes(mstream.Length - 1) As Byte
        mstream.Position = 0
        mstream.Read(myBytes, 0, mstream.Length)
        Return myBytes
End Function

解决方案1

您能否不只为图像指定一个唯一的名称,将其作为文件保存到服务器,然后仅在数据库中存储对该文件的引用?

コメント

タイトルとURLをコピーしました