كيفية تخزين الصور في قاعدة بيانات خادم MS SQL من تطبيق نموذج الفوز VB.NET مع الحد الأدنى من مساحة قاعدة البيانات؟


مرحبًا!
يوم جيد للجميع،

لدي مشروع نموذج Windows VB.Net مع MS SQL Server كقاعدة بيانات خلفية. أقوم بتخزين الصور في قاعدة البيانات من التطبيق. هذا مطلوب من قبل العميل، على سبيل المثال عندما يقوم المستخدم بنشر قسيمة دفع فإنه يحتاج إلى تخزين بعض المستندات اليدوية كإثباتات داعمة للمعاملة. كل شيء يسير على ما يرام. يتم تخزين الصور واسترجاعها بشكل مثالي. ولكن بسبب هذا فإن حجم قاعدة البيانات يتزايد أكثر بكثير مما كان متوقعا.
الآن أريد أن أعرف كيف يمكنني القيام بنفس المهمة مع شغل مساحة تخزين قاعدة البيانات بأقل قدر ممكن.

إذا كان أي شخص يستطيع المساعدة في هذا الصدد، سأكون ممتنا للغاية.

شكرا مع تحياتي.

ما حاولت:

أولاً، أقوم بإدراج صورة في عنصر التحكم PictureBox من خلال تصفح Windows باستخدام 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

ثم لتخزين الصورة أستخدم الكود التالي.

  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をコピーしました