Member 13910887 Ответов: 3

Сохраните большой МБ изображения в базе данных mysql VB.NET


этот код работает, но когда я пытаюсь сохранить 250 до 500 плюс МБ изображения, он показывает ошибку i rich the limit, можете ли вы помочь мне, ребята, сохранить большой МБ изображения в базе данных MYSQL с помощью VB.net-Спасибо тебе..

Что я уже пробовал:

Private Sub SAVECATEGORY_Click(sender As Object, e As EventArgs) Handles SAVECATEGORY.Click

       Dim ms As New MemoryStream  '...........need to Imports System.IO from general
       PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png) ' ........save IMAGE

       If PictureBox1.Image Is Nothing Then
           MessageBox.Show("Please Insert image ")
           addcategoryclear()           'you call ddcategoryclear()  to clear textbox and picturebox
       ElseIf TextBox1.Text = "" Then
           MessageBox.Show("Please Insert Image Name")
           addcategoryclear()           'you call ddcategoryclear()  to clear textbox and picturebox
       Else
           '..............
           cn.Open()
           Dim command As New MySqlCommand("INSERT INTO `category`( `IMG`, `NAME`) VALUES (@IMG,@NAME)", cn)
           With command.Parameters

               .Add("@IMG", MySqlDbType.Blob).Value = ms.ToArray()
               .AddWithValue("NAME", TextBox1.Text)
           End With

           If command.ExecuteNonQuery() = 1 Then
               MessageBox.Show("You Successfully Save")
               addcategoryclear() 'you call ddcategoryclear()  to clear textbox and picturebox
               loadcategory()
           Else
               MessageBox.Show("Something Wrong Pleas Try again")
           End If
           cn.Close()
       End If
       Me.Refresh()
   End Sub

MadMyche

Какое сообщение об ошибке вы получаете?

Member 13910887

это и есть ошибка.
Для MySQL.Данных.MySqlClient.MySqlException: "пакеты размером больше max_allowed_packet не допускаются".

3 Ответов

Рейтинг:
24

MadMyche

Теперь, когда мы знаем, в чем проблема, мы можем выяснить, что она означает, причину и возможные исправления.

Член 13910887
это и есть ошибка.
Для MySQL.Данных.MySqlClient.MySqlException:
Packets larger than max_allowed_packet are not allowed

Таким образом, ваш запрос слишком длинный; по-видимому, ограничение по умолчанию составляет 1 МБ для оператора запроса, но это может быть изменено различными способами.
Прочтите эту статью и попробуйте ее.
Пакеты размером больше max_allowed_packet не допускаются · MySqlBackupNET/MySqlBackup.Net Wiki · GitHub[^]

Моя рекомендация состояла бы только в том, чтобы делать это при необходимости; если по какой-то случайной причине сервер был скомпрометирован, меньший предел размера означает, что меньше может быть введено с помощью одной команды.


Member 13910887

не могли бы вы помочь мне, где я должен поместить это в свой код
спасибо

MadMyche

Я бы управлял этим SET SESSION max_allowed_packet=1024*1024*1024 как отдельный текст команды и выполнить перед вашей командой insert/update

Member 13910887

не могли бы вы проверить, пожалуйста, если я ошибаюсь, Я не знаю, где бы я разместил этот кодовый набор сессии max_allowed_packet=1024*1024*1024

MadMyche

Попробуйте это

Dim qry1 as String = "SET SESSION max_allowed_packet=32*1024*1024;"
Dim qry2 as String = "INSERT INTO `category`( `IMG`, `NAME`) VALUES (@IMG,@NAME)"

Dim command As New MySqlCommand(qry1 + qry2, cn)
With command.Parameters
  .Add("@IMG", MySqlDbType.Blob).Value = ms.ToArray()
  .AddWithValue("NAME", TextBox1.Text)
End With

Member 13910887

я пробую код
ошибка та же самая
в этой части всегда отображается окно ошибки
Если команда.ExecuteNonQuery() = 1 Тогда
Ящик для сообщений.Показать("Вы Успешно Сохранили")
addcategoryclear() 'вы вызываете ddcategoryclear (), чтобы очистить текстовое поле и picturebox
loadcategory()
Конец, Если
Ящик для сообщений.Показать("что-то не так мольбы попробуй еще раз")
Конец, Если

MadMyche

Возможно, вы захотите проверить, есть ли у вас разрешения на внесение этих изменений - это должно было сработать

Member 13910887

я что бы определить, как исправить проблему, для этого иду прыгать в чистый процесс

Member 13910887

я пытаюсь сохранить только изображение и удалить другой запрос, но ошибка та же самая

Member 13910887

Привет... Я замечаю, что изображение, которое я хочу сохранить, не является частью (*.JPG;*.PNG;.*Гиф;)|*.формат JPG;*.формат PNG;*.джиф"), так что образ, который я пытался спасти, это "jfif имеют"
я ищу в интернете и преобразую изображение в следующее

Рейтинг:
0

Member 13910887

ошибка та же самая, я не думаю, что если я пропущу место, то

SET SESSION max_allowed_packet=1024*1024*1024


Private Sub SAVECATEGORY_Click(sender As Object, e As EventArgs) Handles SAVECATEGORY.Click

       Dim ms As New MemoryStream  '...........need to Imports System.IO from general


       If PictureBox1.Image Is Nothing Then
           MessageBox.Show("Please Insert image ")
           addcategoryclear()           'you call ddcategoryclear()  to clear textbox and picturebox
       ElseIf TextBox1.Text = "" Then
           MessageBox.Show("Please Insert Image Name")
           addcategoryclear()           'you call ddcategoryclear()  to clear textbox and picturebox
       Else
           cn.Open()
           PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png) ' ........save IMAGE

           Dim command As New MySqlCommand("INSERT INTO `category`( `IMG`, `NAME`) VALUES (@IMG,@NAME)", cn)

           With command.Parameters
               ' Set SESSION max_allowed_packet=1024*1024*1024
               cmd.CommandText = "SET SESSION max_allowed_packet=32*1024*1024;"
               .Add("@IMG", MySqlDbType.Blob).Value = ms.ToArray()
               .AddWithValue("NAME", TextBox1.Text)
           End With

           If command.ExecuteNonQuery() = 1 Then
               MessageBox.Show("You Successfully Save")
               addcategoryclear() 'you call ddcategoryclear()  to clear textbox and picturebox
               loadcategory()
           End If
           MessageBox.Show("Something Wrong Pleas Try again")
       End If
       cn.Close()
       Me.Refresh()
   End Sub


Рейтинг:
0

Member 13910887

я тоже пытаюсь это сделать но ошибка та же самая

Private Sub SAVECATEGORY_Click(sender As Object, e As EventArgs) Handles SAVECATEGORY.Click
     Dim ms As New MemoryStream  '...........need to Imports System.IO from general

     If PictureBox1.Image Is Nothing Then
         MessageBox.Show("Please Insert image ")
         addcategoryclear()           'you call ddcategoryclear()  to clear textbox and picturebox
     ElseIf TextBox1.Text = "" Then
         MessageBox.Show("Please Insert Image Name")
         addcategoryclear()           'you call ddcategoryclear()  to clear textbox and picturebox
     Else
         cn.Open()
         PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png) ' ........save IMAGE

         Dim command As New MySqlCommand("INSERT INTO `category`( `IMG`, `NAME`) VALUES (@IMG,@NAME)", cn)

         With command.Parameters
             ' Set SESSION max_allowed_packet=1024*1024*1024
             .Add("@IMG", MySqlDbType.Blob).Value = ms.ToArray()
             .AddWithValue("NAME", TextBox1.Text)
         End With
         '  cmd.CommandText = "SET SESSION max_allowed_packet=32*1024*1024;"
         If command.ExecuteNonQuery() = "SET SESSION max_allowed_packet=1024*1024*1024" Then
             MessageBox.Show("You Successfully Save")
             addcategoryclear() 'you call ddcategoryclear()  to clear textbox and picturebox
             loadcategory()
         End If
         MessageBox.Show("Something Wrong Pleas Try again")
     End If
     cn.Close()
     Me.Refresh()
 End Sub