Làm cách nào để lưu trữ hình ảnh trong cơ sở dữ liệu máy chủ MS SQL từ ứng dụng VB.NET win form với không gian cơ sở dữ liệu tối thiểu?

lập trình


Xin chào!
Chúc một ngày tốt lành cho tất cả mọi người,

Tôi có một dự án biểu mẫu cửa sổ VB.Net với MS SQL Server làm cơ sở dữ liệu phụ trợ. Tôi đang lưu trữ hình ảnh vào cơ sở dữ liệu từ ứng dụng. Điều này được khách hàng yêu cầu, ví dụ: khi người dùng đăng Phiếu thanh toán thì anh ta cần lưu trữ một số tài liệu thủ công làm bằng chứng hỗ trợ cho giao dịch. Mọi thứ sẽ ổn. Hình ảnh được lưu trữ và truy xuất một cách hoàn hảo. Nhưng do điều này nên kích thước của cơ sở dữ liệu đang tăng lên nhiều hơn dự kiến.
Bây giờ tôi muốn biết làm cách nào tôi có thể thực hiện tác vụ tương tự với việc chiếm dung lượng lưu trữ cơ sở dữ liệu ở mức tối thiểu nhất có thể.

Nếu có ai có thể giúp đỡ về vấn đề này, tôi sẽ rất biết ơn.

Cảm ơn và trân trọng.

Những gì tôi đã thử:

Đầu tiên tôi chèn ảnh vào điều khiển PictureBox bằng cách duyệt windows bằng OpenFileDialog.

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

Sau đó, để lưu trữ hình ảnh tôi sử dụng đoạn mã sau.

  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

Để chuyển đổi Hình ảnh thành Byte, tôi đã viết một hàm sau có tên là “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

Giải pháp 1

Bạn có thể đặt cho hình ảnh một cái tên duy nhất, lưu nó vào máy chủ dưới dạng tệp và sau đó chỉ lưu trữ tham chiếu đến tệp trong cơ sở dữ liệu không?

コメント

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