none
C# MySQL хранение изображения в базе RRS feed

  • Вопрос

  • Доброго времени суток!

    Есть программа которая записывает маленькие картинки в базу MySQL (установлен на Win 2008R2) , если записывать картинку с localhost на самом сервере тогда все хорошо, а если с другой машины локальной сети, тогда MySQLDataReader крашится в программе при попытке вытянуть файл с БД, при этом другими СУБД (например: dbForge Studio for MySQL) с базы можно вытянуть эту картинку.

    Сам код который вытягивает картинки:

     public MemoryStream Load_Image(string IdMaterialValue)
            {
                string query = String.Format("SELECT foto FROM matvalue_foto WHERE idMaterialValue = '{0}'", IdMaterialValue);
                MemoryStream ms = new MemoryStream();
                using (MySqlConnection con = new MySqlConnection(ConString))
                {
                    MySqlCommand com = new MySqlCommand(query, con);
                    con.Open();
                    try
                    {
                        MySqlDataReader data = com.ExecuteReader();
                        if (data.HasRows)
                        {
                            foreach (DbDataRecord record in data)
                            {
                                ms.Write((byte[])record[0], 0, ((byte[])record[0]).Length);
                            }
                        }
                        else { return null; }
                    }
                    catch (Exception ex)
                    {
                        return null;
                    }
                }
                return ms;
              }
           }

    Побывал брандмауэр отключать не помогло.

    Подскажите пожалуйста что не так?

    Спасибо!


    • Изменено Vetal79 22 декабря 2014 г. 9:23
    22 декабря 2014 г. 9:10

Ответы

  • Все разобрался дело не в C# а в самом MySQL настройка net_buffer_length надо было поставить по размеру поля MediumBlop
    • Помечено в качестве ответа Vetal79 22 декабря 2014 г. 13:16
    22 декабря 2014 г. 12:39

Все ответы

  • Извините за оффтоп. Но я всегда думал. что лучше хранить в БД пути на картинки, а не пихать их в БД (независимо большие или маленькие).

    Надеюсь, кто-то комптентный в вопросах БД прояснит это в данном топике.

    Спасибо.

    22 декабря 2014 г. 10:08
  • Я это прекрасно понимаю, но есть такое как: "Так надо"
    22 декабря 2014 г. 10:21
  • Я это прекрасно понимаю, но есть такое как: "Так надо"
    Если я правильно прочел сишный код, то вы считываете все байты разом. Может у данного ридера ограничения по количеству считываемых за раз байт. Либо найти в настройках это ограниччение и убрать, либо считывать маленькими пакетами.

    VB.Net - WPF, WinRT, WP

    22 декабря 2014 г. 10:53
    Отвечающий
  • Я это прекрасно понимаю, но есть такое как: "Так надо"

    Если я правильно прочел сишный код, то вы считываете все байты разом. Может у данного ридера ограничения по количеству считываемых за раз байт. Либо найти в настройках это ограниччение и убрать, либо считывать маленькими пакетами.

    VB.Net - WPF, WinRT, WP

    Такой настройки не нашел, дело в том что на машине где хранится база все нормально работает.
    22 декабря 2014 г. 11:07
  • Такой настройки не нашел, дело в том что на машине где хранится база все нормально работает.
    Ну если тот же код с теми же коннекторами на другой машине работает, то проблема в недрах сетевых настроек вашей машины или в антивире. Пробовали его выключать?

    VB.Net - WPF, WinRT, WP

    22 декабря 2014 г. 11:10
    Отвечающий
  • Ну если тот же код с теми же коннекторами на другой машине работает, то проблема в недрах сетевых настроек вашей машины или в антивире. Пробовали его выключать?

    VB.Net - WPF, WinRT, WP

    Побывал не помогает, обнаружил еще одну вещь: если локально записать файл потом вытянуть его через СУБД тогда нормально его можно записывать и читать с любого компьютера

    Вроде прояснилось в поле mediumblop файл до 100 КБ читаются без проблем по сети а вот больше нет смена на longblop не принесла результата.

    • Изменено Vetal79 22 декабря 2014 г. 11:35
    22 декабря 2014 г. 11:20
  • Все разобрался дело не в C# а в самом MySQL настройка net_buffer_length надо было поставить по размеру поля MediumBlop
    • Помечено в качестве ответа Vetal79 22 декабря 2014 г. 13:16
    22 декабря 2014 г. 12:39
  • Все разобрался дело не в C# а в самом MySQL настройка net_buffer_length надо было поставить по размеру поля MediumBlop
    Ну то есть я был близок к разгадке ))

    VB.Net - WPF, WinRT, WP

    22 декабря 2014 г. 13:05
    Отвечающий