El mensaje es claro. O tienes fields estaticos que generan el SharedState o
estas llamando a algun metodo prohibido dentro del SQL Server debido a su
HPA.

En tu caso al menos estas usando System.ComponentModel.ByteConverter() que
no se puede usar porque tiene el HPA SharedState.

No te paso la pagina de MSDN porque esta caido el sitio pero puedes ver la
info en la ayuda bajo el titulo "Disallowed Types and Members In System.dll"

Saludos

--
--------------------------------
Atte.
Ing. Jose Mariano Alvarez
SQL Total Consulting






On 6/20/07, Carlos S. Villalba <[EMAIL PROTECTED]> wrote:

El ensamblado lo creo:
CREATE ASSEMBLY Encriptador
FROM
'D:\Proyectos\Test\Encriptacion\Encriptacion\bin\Release\Encriptacion.dll'
WITH PERMISSION_SET = SAFE
go


La función la creo:

CREATE FUNCTION fc_Desencriptar
(
@cadena nvarchar(50)
)
RETURNS nvarchar(50)
AS EXTERNAL NAME Encriptador.[Encriptacion.Encriptacion
].DesencriptarCadena


La clase encripta y  desencripta utilizando los namespaces:

Imports System.Security.Cryptography
Imports System.Text
Imports System.IO


La función es la siguiente:
Public Shared Function DesencriptarCadena(ByVal InputString As String) As
String
       If InputString = String.Empty Then
           Return ""
       Else
           Dim Des As New TripleDESCryptoServiceProvider
           'Put the string into a byte array
           Dim InputbyteArray(CType(InputString.Length / 2 - 1, Integer))
As Byte '= Encoding.UTF8.GetBytes(InputString)
           'Create the crypto objects, with the key, as passed in
           Dim hashMD5 As New MD5CryptoServiceProvider

           Des.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes
("CLAVE"))
           Des.Mode = CipherMode.ECB
           'Put the input string into the byte array

           Dim X As Integer

           For X = 0 To InputbyteArray.Length - 1
               Dim IJ As Int32 = (Convert.ToInt32(InputString.Substring(X
* 2, 2), 16))
               Dim BT As New System.ComponentModel.ByteConverter()
               InputbyteArray(X) = New Byte
               InputbyteArray(X) = CType(BT.ConvertTo(IJ, GetType(Byte)),
Byte)
           Next

           Dim ms As MemoryStream = New MemoryStream
           Dim cs As CryptoStream = New CryptoStream(ms,
Des.CreateDecryptor(), _
           CryptoStreamMode.Write)

           'Flush the data through the crypto stream into the memory
stream
           cs.Write(InputbyteArray, 0, InputbyteArray.Length)
           cs.FlushFinalBlock()

           '//Get the decrypted data back from the memory stream
           Dim ret As StringBuilder = New StringBuilder
           Dim B() As Byte = ms.ToArray

           ms.Close()

           Dim I As Integer

           For I = 0 To UBound(B)
               ret.Append(Chr(B(I)))
           Next

           Return ret.ToString()
       End If
   End Function

Estoy utilizando el SQL 2005.
___________________________________________

Sebastian Villalba
Award Support S.R.L.
[EMAIL PROTECTED]
Tel/Fax: 4541-0503 y lineas rotativas
___________________________________________

-----Original Message-----
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Maxi Accotto
Sent: Miércoles, 20 de Junio de 2007 05:12 p.m.
To: Carlos S. Villalba
Subject: [dbms] Usar Assembly

Podrias poner el codigo? que sql usas?

El 20/06/07, Carlos S. Villalba <[EMAIL PROTECTED]> escribió:
> En el reporte utilizar la DLL???, uuy eso si que no se hacerlo. Te
aclaro que es Crystal report, igual ya solucione el error que publique,
ahora estoy peleando con otro error:
>
> Mens 6522, Nivel 16, Estado 1, Procedimiento fc_Desencriptar, Línea 0
> Error de .NET Framework durante la ejecución de la rutina o agregado
definido por el usuario 'fc_Desencriptar':
> System.Security.HostProtectionException: Attempted to perform an
operation that was forbidden by the CLR host.
>
> The protected resources (only available with full trust) were: All
> The demanded resources were: SharedState
>
> La función la cree correctamente. El error lo tira cuando la quiero usar
>
> ___________________________________________
>
> Sebastian Villalba
> Award Support S.R.L.
> [EMAIL PROTECTED]
> Tel/Fax: 4541-0503 y lineas rotativas
> ___________________________________________
> -----Original Message-----
> From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Maxi Accotto
> Sent: Miércoles, 20 de Junio de 2007 04:34 p.m.
> To: Carlos S. Villalba
> Subject: [dbms] Usar Assembly
>
> Sebastian, yo no te recomendaria resolverlo asi, una forma seria en el
> reporte que este use la funcion dll, si igual lo queres hacer con SQL
> vas a tener que usar SQL2005
>
> El 20/06/07, Carlos S. Villalba <[EMAIL PROTECTED]>
escribió:
> >
> >
> >
> > Que tal gente:
> >
> >                                Necesito consumir por medio de una
función o
> > un stored procedure, una dll. Tengo muchas dudas al respecto, y son
las
> > siguientes:
> >
> >                 Antes que nada explico lo que quiero hacer. Tengo un
reporte
> > que muestra un listado, uno de los campos que muestra esta encriptado,
y yo
> > lo quiero mostrar desencriptado. El tema es que yo a ese campo lo
guardo
> > encriptado por medio de una función que realice en .NET. Ahora esa
misma
> > función la quiero consumir por medio de una función o un stored
procedure.
> >
> > -          Mi dll es de .NET y lo que hace es encriptar y desencriptar
una
> > cadena.  Yo utilizaría la función Desencriptar solamente.
> >
> > -          Yo llego crear el assembly de la siguiente manera:
> >
> >
> >
> > CREATE ASSEMBLY Encriptador
> >
> > FROM
> >
'D:\Proyectos\Test\Encriptacion\Encriptacion\bin\Release\Encriptacion.dll'
> >
> > WITH PERMISSION_SET = SAFE
> >
> >
> >
> > Hasta aca va todo bien.
> >
> > -           Cuando quiero crear una función:
> >
> >
> >
> > CREATE FUNCTION fc_Desencriptar
> >
> > (
> >
> > @cadena varchar(50),
> >
> > @llave varchar(50)
> >
> > )
> >
> > RETURNS varchar(50)
> >
> > AS EXTERNAL NAME Encriptador.Encriptacion.DesencriptarCadena
> >
> >
> >
> >  me dice: No se encontró el tipo 'Encriptacion' en el ensamblado
> > 'Encriptacion'.
> >
> >
> >
> > La clase se llama Encriptacion y tiene 2 funciones que se llaman:
> > EncriptarCadena, y DesencriptarCadena.
> >
> > Mi preguntas son, en la clase .NET tengo que especificar algo como
para que
> > el SQL lo utilice??, que puede llegar a ser este error??.
> >
> >
> >
> > Desde ya muchas gracias. Espero puedan darme alguna pequeña respuesta.
> > Gracias.
> >
> >
> >
> > ___________________________________________
> >
> >
> >
> > Sebastian Villalba
> >
> > Award Support S.R.L.
> >
> > [EMAIL PROTECTED]
> >
> > Tel/Fax: 4541-0503 y lineas rotativas
> >
> > ___________________________________________
>
>
> --
> -----------------------------------------------------------
> Microsoft MVP en SQL Server
> Mentor asociado en SQLTotalConsulting
>  (excelencia en servicios y consultoria  SQLServer)
> Orador Culminis - Microsoft Influencier
> www.sqltotalconsulting.com
> -----------------------------------------------------------
>
>
>


--
-----------------------------------------------------------
Microsoft MVP en SQL Server
Mentor asociado en SQLTotalConsulting
(excelencia en servicios y consultoria  SQLServer)
Orador Culminis - Microsoft Influencier
www.sqltotalconsulting.com
-----------------------------------------------------------



Responder a