Spero che tu abbia una buona giornata!Accesso a COM in SQL CLR
Ho bisogno dei tuoi consigli per qualcosa che ho pensato a questi ultimi tre giorni. Ho un componente COM scritto in una piattaforma non gestita. Il componente ha un metodo che restituisce una sorta di alcuni dati sensibili e ho bisogno di memorizzare il valore non appena ho capito.
Quello che mi serve è chiamare una UDF per accedere all'oggetto COM e ottenere il valore. Ho provato questo finora e sto ottenendo questa eccezione:
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)
Sembra che la funzione non può vedere il componente COM registrato (80040154). L'assembly clr è registrato come non limitato. Ho provato a chiamare l'UDF con 'sa' o in modalità integrata di Windows. Non c'è differenza.
Questo è il codice per l'inizializzazione del componente COM e il codice sta lavorando bene SQL fuori:
Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("D039A99F-5D45-42C7-A53C-507913D8C6D6"), true))
Esiste un modo per rendere questi ragazzi che lavorano? In un modo o nell'altro ho bisogno di un UDF chiamare questo oggetto COM o almeno accedere ad alcuni servizi Windows con .NET remoting tramite questa UDF. Ogni suggerimento mi guiderà attraverso questo modo sarebbe apprezzato.
Grazie a tutti.
controllare questo collegamento http://stackoverflow.com/questions/7289620/activator-createinstanceguid-works-inside-vside-but-not-externally –
@DJKRAZE Ho menzionato che il codice funziona bene al di fuori dell'SQL. :) – Rikki
@BehnamEsmaili Sembra che il collegamento abbia risolto il problema di avviare l'oggetto COM al di fuori dell'SQL e non ho alcun problema con quello che ho già menzionato. – Rikki