Mam nadzieję, że wszyscy się dobrze bawili!Uzyskiwanie dostępu do COM w języku SQL CLR
Potrzebuję twoich rekomendacji dla czegoś, co myślałem o tych trzech ostatnich dniach. Mam komponent COM napisany na niezarządzanej platformie. Komponent ma metodę, która zwraca pewien rodzaj poufnych danych i muszę zapisać wartość, gdy tylko ją dostanę.
Potrzebuję wywołać UDF, aby uzyskać dostęp do obiektu COM i uzyskać jego wartość. Próbowałem to tak daleko, a ja otrzymuję ten wyjątek:
Msg 6522, Level 16, State 2, Line 1
A .NET Framework error occurred during execution of user-defined routine or aggregate "GetRate": System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {D039A99F-5D45-42C7-A53C-507913D8C6D6} failed due to the following error: 80040154.
System.Runtime.InteropServices.COMException:
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at UserDefinedFunctions.GetRate(SqlString Source_Currency_Name, SqlString Destination_Currency_Name, SqlMoney Amount, SqlBoolean Mode)
Wydaje się, że ta funkcja nie może zobaczyć zarejestrowaną komponent COM (80040154). Zespół Clr jest zarejestrowany jako nieograniczony. Próbowałem wywołać UDF z "sa" lub w trybie zintegrowanym systemu Windows. Nie ma różnicy.
Jest to kod dla inicjalizacji komponentu COM i kod działa poprawnie SQL poza:
Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("D039A99F-5D45-42C7-A53C-507913D8C6D6"), true))
Czy mimo to zrobić to chłopaki działa? Tak czy inaczej potrzebuję wywołania UDF tego obiektu COM lub przynajmniej dostępu do niektórych usług Windows z .NET remoting poprzez ten UDF. Każda sugestia poprowadzi mnie tą drogą będzie doceniona.
Dziękuję wszystkim.
sprawdź ten link http://stackoverflow.com/questions/7289620/activator-createinstanceguid-works-inside-vside-but-not-externally –
@DJKRAZE Wspomniałem, że kod działa dobrze poza SQL. :) – Rikki
@BehnamEsmaili Wygląda na to, że łącze rozwiązało problem inicjowania obiektu COM poza SQL i nie mam z tym problemu, jak już wspomniałem. – Rikki