Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка при подключении CLR сборки использующей System.Drawing  [new]
navaron
Member

Откуда: Харьков
Сообщений: 33
При попытке подключения сборки, написанной на C#
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

public class DBImageWork
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void SetPlane_Table(SqlString Blok, SqlString Nomer, SqlBinary PlaneImage)
    {
        MemoryStream ms = new MemoryStream();
        ms.Write(PlaneImage.Value, 0, PlaneImage.Length);
        ms.Seek(0, SeekOrigin.Begin);
        Bitmap FullImage = new Bitmap(ms);
        ms.Close();

        ms = new MemoryStream();
        (new Bitmap(FullImage, new Size(2000, 2000))).Save(ms, ImageFormat.Jpeg);
        SqlBinary sqlImage2000 = new SqlBinary(ms.ToArray());
        ms.Close();

        ms = new MemoryStream();
        (new Bitmap(FullImage, new Size(1000, 1000))).Save(ms, ImageFormat.Jpeg);
        SqlBinary sqlImage1000 = new SqlBinary(ms.ToArray());
        ms.Close();

        ms = new MemoryStream();
        (new Bitmap(FullImage, new Size(500, 500))).Save(ms, ImageFormat.Jpeg);
        SqlBinary sqlImage500 = new SqlBinary(ms.ToArray());
        ms.Close();

        ms = new MemoryStream();
        (new Bitmap(FullImage, new Size(100, 100))).Save(ms, ImageFormat.Jpeg);
        SqlBinary sqlImage100 = new SqlBinary(ms.ToArray());
        ms.Close();

        ms = new MemoryStream();
        (new Bitmap(FullImage, new Size(50, 50))).Save(ms, ImageFormat.Jpeg);
        SqlBinary sqlImage50 = new SqlBinary(ms.ToArray());
        ms.Close();

        using (SqlConnection connection = new SqlConnection("context connection=true")) 
        { 
            connection.Open(); 
            SqlCommand command = new SqlCommand(    "INSERT INTO Plane_Table values (" + 
                                                    "newid(), " +
                                                    "@Blok," +
                                                    "@Nomer," +
                                                    "@Full_Image," +
                                                    "@Image2000," +
                                                    "@Image1000," +
                                                    "@Image500," +
                                                    "@Image100," +
                                                    "@Image50)");
            command.Parameters["@Blok"].Value = Blok;
            command.Parameters["@Nomer"].Value = Nomer;
            command.Parameters["@Full_Image"].Value = PlaneImage;
            command.Parameters["@Image2000"].Value = sqlImage2000;
            command.Parameters["@Image1000"].Value = sqlImage1000;
            command.Parameters["@Image500"].Value = sqlImage500;
            command.Parameters["@Image100"].Value = sqlImage100;
            command.Parameters["@Image50"].Value = sqlImage50;

            command.ExecuteNonQuery();
        }
    }
}

(Откомпилированный проект помещается в папку d:\DBLibrary\
Там же находится файл System.Drawing.dll из папки
c:\windows\Microsoft.NET\Framework\v2.0.50727)

на сервер MS SQL Server 2005 с использованием команды
CREATE ASSEMBLY SetPlane_Table from 'd:\DBLibrary\Project1.dll' WITH PERMISSION_SET = SAFE

выдаётся ошибка

Warning: The Microsoft .Net frameworks assembly 'system.drawing, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a, processorarchitecture=msil.' you are registering is not fully tested in SQL Server hosted environment.
Msg 6218, Level 16, State 2, Line 1
CREATE ASSEMBLY for assembly 'Project1' failed because assembly 'System.Drawing' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
[ : System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000249][смещение 0x00000053][найдено address of Byte] В стеке ожидалось значение числового типа.
[ : System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000249][смещение 0x00000043][найдено Native Int][ожидалось address of Byte] Непредусмотренный тип в стеке.
[

Там дальше ещё куча разных [ : System.Drawing...

Как привязать к SQL серверу корректную версию библиотек?

Сообщение было отредактировано: 12 мар 10, 13:54
12 мар 10, 13:24    [8468641]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
WITH PERMISSION_SET = UNSAFE ?
12 мар 10, 13:29    [8468709]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
navaron
Member

Откуда: Харьков
Сообщений: 33
с WITH PERMISSION_SET = UNSAFE выдаётся ошибка

Warning: The Microsoft .Net frameworks assembly 'system.drawing, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a, processorarchitecture=msil.' you are registering is not fully tested in SQL Server hosted environment.
Msg 10327, Level 14, State 1, Line 1
CREATE ASSEMBLY for assembly 'Project1' failed because assembly 'Project1' is not authorized for PERMISSION_SET = UNSAFE. The assembly is authorized when either of the following is true: the database owner (DBO) has UNSAFE ASSEMBLY permission and the database has the TRUSTWORTHY database property on; or the assembly is signed with a certificate or an asymmetric key that has a corresponding login with UNSAFE ASSEMBLY permission. If you have restored or attached this database, make sure the database owner is mapped to the correct login on this server. If not, use sp_changedbowner to fix the problem.

Сообщение было отредактировано: 12 мар 10, 13:53
12 мар 10, 13:48    [8468900]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
navaron
Member

Откуда: Харьков
Сообщений: 33
Решение проблемы:

Перед регистрацией сборки надо было выполнить скрипт:

USE [geosystem]
GO
ALTER DATABASE geosystem
   SET TRUSTWORTHY ON
GO
USE [geosystem]
GO
CREATE ASSEMBLY [System.Drawing]
FROM 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll'
WITH PERMISSION_SET = UNSAFE
GO
12 мар 10, 14:36    [8469342]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
navaron
Решение проблемы:

Перед регистрацией сборки надо было выполнить скрипт:

USE [geosystem]
GO
ALTER DATABASE geosystem
   SET TRUSTWORTHY ON
GO
USE [geosystem]
GO
CREATE ASSEMBLY [System.Drawing]
FROM 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll'
WITH PERMISSION_SET = UNSAFE
GO


так это и было описано в тексте ошибки
12 мар 10, 15:08    [8469644]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
izoldov-roskini
Member

Откуда:
Сообщений: 1169
Я использую в библиотеке пространство System.IO как быть в этом случае? mscorlib.dll подключить не дает
15 мар 12, 16:10    [12254684]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
izoldov-roskini
Я использую в библиотеке пространство System.IO как быть в этом случае? mscorlib.dll подключить не дает


пишет "я не даю подключить" ?
15 мар 12, 16:13    [12254728]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
izoldov-roskini
Я использую в библиотеке пространство System.IO как быть в этом случае? mscorlib.dll подключить не дает
Насколько я понимаю, mscorlib подключено изначально.

А что значит "не даёт" - за руку держит, а ошибки нет?
15 мар 12, 16:15    [12254758]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
izoldov-roskini
Member

Откуда:
Сообщений: 1169
alexeyvg,
приложил скрин

К сообщению приложен файл. Размер - 9Kb
15 мар 12, 16:29    [12254955]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
izoldov-roskini
Member

Откуда:
Сообщений: 1169
Help кто-нибудь
15 мар 12, 16:40    [12255122]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
izoldov-roskini
Member

Откуда:
Сообщений: 1169
Вроде решил вопрос, сделал .Net 3.5 и убрал из using System.IO , писал прямо в тексте процедуры System.IO.FileInfo
15 мар 12, 16:45    [12255178]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
да CLR из Net4 почему не срабатывает с SQL
у меня тоже такая же хрень была
установку в проекте ставил на NEТ3.5
16 мар 12, 10:41    [12258432]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при подключении CLR сборки использующей System.Drawing  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
michael R
да CLR из Net4 почему не срабатывает с SQL
Да, да, очень странно.
Почему это .Net 3 в SQL не может запустить сборку из .Net 4.
Вон все программы под DOS работают и даже без OS запускаются, а тут плохой SQL не хочет поддерживать реверсивную совместимость.

Особенно меня порадовало название темы. Это почему сборка работы с графикой не хотит работать в скуле.
Скуль же для 3D шутеров делался. Ё!

Существуют две бесконености - вселенная и ...
16 мар 12, 11:43    [12258905]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить