На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> использование System.Drawing в MS SQL
    Задача такова, нужно написать функцию которая бы преобразовала картинку из формата EMF хранящегося в базе, и вернула как значение его в формате BMP.

    Первое с чем я столкнулся было отсутствие System.Drawing, что с помощью гугла я смог решить http://www.scalabium.com/faq/nct0011.htm

    Но вот при попытке прочесть данные System.Drawing.Imaging.Metafile заканчиваются ошибкой

    Цитата
    Msg 6522, Level 16, State 1, Line 1
    A .NET Framework error occurred during execution of user-defined routine or aggregate "GetPositionImage":
    System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
    System.Runtime.InteropServices.ExternalException:
    at System.Drawing.Imaging.Metafile..ctor(Stream stream)
    at UserDefinedFunctions.GetPositionImage(SqlBytes image, SqlInt16 flag)


    тот же самый код в обычном проекте, созданным для отладки, отрабатывает корректно, когда помещаешь а SQL проект и деплоишь уже не выполняется. Причем если ту же самую процедуру выполнять с полем в котором хранится в BMP формате и грузить в Bitmap, то проблем тоже нет. Такое впечатление что есть некая особенность работы System.Drawing.Imaging.Metafile

    Код функции ниже,
    урезал до 2х строк, грохается на System.Drawing.Imaging.Metafile draw = new System.Drawing.Imaging.Metafile(stream)

    ExpandedWrap disabled
      public partial class UserDefinedFunctions
      {
          [Microsoft.SqlServer.Server.SqlFunction]
          public static SqlBytes GetPositionImage(SqlBytes image, SqlInt16 flag)
          {
              MemoryStream stream = new MemoryStream(image.Value);
       
              System.Drawing.Imaging.Metafile draw = new System.Drawing.Imaging.Metafile(stream);
       
              /*switch (flag.Value)
              {
                  case 1:
                      draw.Save(output, System.Drawing.Imaging.ImageFormat.Bmp);
                      break;
                  case 2:
                      draw.Save(output, System.Drawing.Imaging.ImageFormat.Gif);
                      break;
                  default:
                      draw.Save(output, System.Drawing.Imaging.ImageFormat.Jpeg);
                      break;
              };
       
       
              output.Position = 0;
              byte[] resultBytes = new byte[output.Length];
              output.Read(resultBytes, 0, (int)output.Length);*/
       
              return null;
          }
      };


    в чем может быть проблема? то что System.Drawing не случайно не включен в Sql assemblys я в курсе, читал из вышеуказанной ссыли. Но мне как то нужно решить эту задачу, с BMP то все прокатывает...
    Сообщение отредактировано: Юра Железобетон -
      сделай COM-объект из сборки и работай с ним в SQL
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0205 ]   [ 15 queries used ]   [ Generated: 21.05.24, 14:14 GMT ]