Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Использование COM объекта в SQL  [new]
mops398
Member

Откуда:
Сообщений: 2
Создал на c# COM объект
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace COM_Library_Test
{
    [Guid("EAA4974A-45C3-4BC5-BC0B-E474F4C3C83F")]
    public interface ComClass1Interface
    {
         int Test();
    }

    [Guid("7BD20046-DF1C-44A6-8F6B-687FAA26FA71"),
        InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ComClass1Events
    {
    }

    [Guid("0D53A3E8-E51A-44C7-944E-E72A2064F938"),
        ClassInterface(ClassInterfaceType.None),
        ComSourceInterfaces(typeof(ComClass1Events))]
    public class ComClass1 : ComClass1Interface
    {
        public int Test()
        {
            return 398;
        }
    }
}


поставил галки, где надо( Регистрация для COM-взаимодействия и Сделать сборку видимой для COM)
Это можно считать COM-объектом? (на вкладке COM в VS появляется)

Теперь я хочу этот COM объект использовать в SQL,
для чего создаю хранимую процедуру
ALTER PROCEDURE [dbo].[COM_IN_SQL_TEST]

	
AS
BEGIN
DECLARE @object int
DECLARE @hr Int	
Declare @res int

 EXEC @hr =  sp_OACreate  'COM_Library_test.COMClass1', @object OUT;
 IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END;
 EXEC @hr =  sp_OAMethod   @object, 'Test', @res OUT  IF @hr <> 0
BEGIN
  EXEC sp_OAGetErrorInfo @object
    RETURN
END;
END

select @res



после выполнения этой процедуры выдается "Недопустимая строка с указанием класса" в строке Sp_OACreate.
Если ProgId заменить на CLSid , то выдается "класс не зарегестрирован". Пытаюсь зарегестировать свою библиотеку через regsvr32.exe , он выдает "Модуль ..... загружен, но точка входа DllRegisterServer не найдена" .
Встает резонные вопрос: МОжет и не COM -объект я создал, а обычную библиотеку?или я совсем ничего не понимаю?
Помогите разобраться, пожалуйста
19 авг 14, 10:25    [16460549]     Ответить | Цитировать Сообщить модератору
 Re: Использование COM объекта в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
mops398
Помогите разобраться, пожалуйста

Это вопросы для другого форума
19 авг 14, 10:47    [16460675]     Ответить | Цитировать Сообщить модератору
 Re: Использование COM объекта в SQL  [new]
мимо
Guest
mops398,
Отнаследуйся от ServicedComponent, подпиши сборку, зарегистрируй com+ (Regsvcs.exe) )
19 авг 14, 10:53    [16460725]     Ответить | Цитировать Сообщить модератору
 Re: Использование COM объекта в SQL  [new]
mops398
Member

Откуда:
Сообщений: 2
Glory,

Переведите пжалуйста в нужный форум

мимо,
отнаследовался вот так
namespace COM_Library_Test 
{
    [Guid("EAA4974A-45C3-4BC5-BC0B-E474F4C3C83F")]
    public interface ComClass1Interface 
    {
         int Test();
    }

    [Guid("7BD20046-DF1C-44A6-8F6B-687FAA26FA71"),
        InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ComClass1Events
    {
    }


    [Guid("0D53A3E8-E51A-44C7-944E-E72A2064F938"), ProgId("COM_Library_Test.ComClass1"), 
        ClassInterface(ClassInterfaceType.None),
        ComSourceInterfaces(typeof(ComClass1Events))]
    public class ComClass1 : ServicedComponent,ComClass1Interface 
    {
        public int Test()
        {
            return 398;
        }
    }

СБорку подписал, regsvcs.exe зарегистрировал. не помогло
19 авг 14, 11:14    [16460908]     Ответить | Цитировать Сообщить модератору
 Re: Использование COM объекта в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
mops398
Переведите пжалуйста в нужный форум

Круто. Найди правильный форум, еще лучше с ответами ?
Я сделаю проще

Сообщение было отредактировано: 19 авг 14, 11:16
19 авг 14, 11:16    [16460933]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить