[ad_1]
مرحبًا!
يوم جيد للجميع،
لدي مشروع نموذج 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
ألا يمكنك فقط إعطاء الصورة اسمًا فريدًا وحفظها على الخادم كملف ثم تخزين مرجع فقط للملف في قاعدة البيانات؟
[ad_2]
コメント