Ensambladores

24/03/2008 - 13:00 por bogal | Informe spam
Hola



Estoy empezando a crear ensambladores



Mi función es



Imports Microsoft.SqlServer.Server

Imports System.Data.SqlClient

Imports System.IO

Public Class clr

Inherits System.Web.UI.Page

<SqlFunction()> Public Function texto_descarga(ByVal numero As Byte, ByVal
c0 As Integer, ByVal nversion As Byte) As String

Dim strfichero As String, strruta As String, strfichero_principal As String
= Nothing

strruta = "Aplicaciones/"

strfichero = "aplicacion"

strfichero &= c0 & IIf(nversion > 0, "(" & nversion & ")", "")

strruta = Server.MapPath(strruta)

For Each foundFile As String In My.Computer.FileSystem.GetFiles(strruta,
FileIO.SearchOption.SearchTopLevelOnly, strfichero & ".*")

strfichero_principal = foundFile.Substring(InStrRev(foundFile, "\"))

Exit For

Next

If strfichero_principal Is Nothing Then strfichero_principal = "Falta " &
strfichero

Return strfichero_principal

End Function



End Class





Compilo y obtengo la dll con vbc



Luego me creo el ensamblador así



CREATE ASSEMBLY clr

'FROM 'C:\clr.dll' WITH PERMISSION_SET = safe



Pero me sale un error



Error de ejecución SQL.



Instrucción SQL ejecutada: CREATE ASSEMBLY clr FROM 'C:\clr.dll' WITH
PERMISSION_SET = safe

Origen del error: .Net SqlClient Data Provider

Mensaje de error: Error de CREATE ASSEMBLY para el ensamblado 'clr' debido a
un error de comprobación del ensamblado 'System.Drawing'. Compruebe si los
ensamblados a los que se hace referencia están actualizados y son de
confianza (para external_access o unsafe) para ejecutarse en la base de
datos. Después de este mensaje aparecen los mensajes de error de comprobación
de CLR, si los hay


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000053][se encontró address of Byte] Se esperaba un tipo numérico en la
pila.


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000043][se encontró Native Int][se esperaba address of Byte] Tipo no
esperado en la pila.


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000027][se encontró Native Int][se esperaba address of Byte] Tipo no
esperado en la pila.


[ : System.Drawing.Icon::GetShort][mdToken=0x600045f][desplazamiento
0x00000002] Los punte...






No sé qué puede fallar. ¿Tengo que actualizar las dll a las que llaman los 3
imports? ¿Dónde obtengo las actualizaciones?




Por lo que parece, el system.drawing es llamado por System.Web.UI.Page



Pero si no pongo el inherits, no me reconoce el server.mappath, y ese es mi
problema, el usar el server.mappath. Requiere el System.Web.UI.Page



¿Me podeis guiar, por favor?



Muchas gracias de antemano

Preguntas similare

Leer las respuestas

#1 Jesús López
24/03/2008 - 17:53 | Informe spam
No se llaman ensambladores se llaman ensamblados.

1) Tu clase clr no debe heredar de System.Web.UI.Page. En realidad no debe
heredar de ninguna clase.
2) Las funciones deben ser Shared.
3) Quita la referencia a System.Drawing.dll y a System.Web.dll
4) Busca otra manera de localizar la ruta al archivo que no sea utilizando
Server.MapPath
5) Si tu función va a acceder a recursos externos tienes que crear el
ensamblado con EXTERNAL ACCESS.

Saludos:

Jesús López
www.solidq.com



"bogal" escribió en el mensaje
news:
Hola



Estoy empezando a crear ensambladores



Mi función es



Imports Microsoft.SqlServer.Server

Imports System.Data.SqlClient

Imports System.IO

Public Class clr

Inherits System.Web.UI.Page

<SqlFunction()> Public Function texto_descarga(ByVal numero As Byte, ByVal
c0 As Integer, ByVal nversion As Byte) As String

Dim strfichero As String, strruta As String, strfichero_principal As
String
= Nothing

strruta = "Aplicaciones/"

strfichero = "aplicacion"

strfichero &= c0 & IIf(nversion > 0, "(" & nversion & ")", "")

strruta = Server.MapPath(strruta)

For Each foundFile As String In My.Computer.FileSystem.GetFiles(strruta,
FileIO.SearchOption.SearchTopLevelOnly, strfichero & ".*")

strfichero_principal = foundFile.Substring(InStrRev(foundFile, "\"))

Exit For

Next

If strfichero_principal Is Nothing Then strfichero_principal = "Falta " &
strfichero

Return strfichero_principal

End Function



End Class





Compilo y obtengo la dll con vbc



Luego me creo el ensamblador así



CREATE ASSEMBLY clr

'FROM 'C:\clr.dll' WITH PERMISSION_SET = safe



Pero me sale un error



Error de ejecución SQL.



Instrucción SQL ejecutada: CREATE ASSEMBLY clr FROM 'C:\clr.dll' WITH
PERMISSION_SET = safe

Origen del error: .Net SqlClient Data Provider

Mensaje de error: Error de CREATE ASSEMBLY para el ensamblado 'clr' debido
a
un error de comprobación del ensamblado 'System.Drawing'. Compruebe si los
ensamblados a los que se hace referencia están actualizados y son de
confianza (para external_access o unsafe) para ejecutarse en la base de
datos. Después de este mensaje aparecen los mensajes de error de
comprobación
de CLR, si los hay


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000053][se encontró address of Byte] Se esperaba un tipo numérico en
la
pila.


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000043][se encontró Native Int][se esperaba address of Byte] Tipo no
esperado en la pila.


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000027][se encontró Native Int][se esperaba address of Byte] Tipo no
esperado en la pila.


[ : System.Drawing.Icon::GetShort][mdToken=0x600045f][desplazamiento
0x00000002] Los punte...






No sé qué puede fallar. ¿Tengo que actualizar las dll a las que llaman los
3
imports? ¿Dónde obtengo las actualizaciones?




Por lo que parece, el system.drawing es llamado por System.Web.UI.Page



Pero si no pongo el inherits, no me reconoce el server.mappath, y ese es
mi
problema, el usar el server.mappath. Requiere el System.Web.UI.Page



¿Me podeis guiar, por favor?



Muchas gracias de antemano


Respuesta Responder a este mensaje
#2 martin
27/03/2008 - 10:20 | Informe spam
Hola de nuevo

Gracias, Jesús

Lo hago como dices

Ahora, al crear el ensamblado así:

CREATE ASSEMBLY clr
FROM 'C:\clr.dll' WITH permission_SET = external_access

Error de ejecución SQL.

Instrucción SQL ejecutada: CREATE ASSEMBLY clr FROM 'C:\Documents and
Settings\Martin\Mis documentos\Mis proyectos\Cresolia\bin\clr.dll' WITH
PERMISSION_SET = external_access
Origen del error: .Net SqlClient Data Provider
Mensaje de error: Error de CREATE ASSEMBLY para el ensamblado 'clr' porque
el ensamblado 'clr' no tiene autorización para PERMISSION_SET =
EXTERNAL_ACCESS. El ensamblado está autorizado cuando se produce una de las
siguientes situaciónes: el propietario de la base de datos tiene permiso de
EXTERNAL ACCESS ASSEMBLY y la base de datos tiene definida la propiedad de
base de datos TRUSTWORTHY, o el ensamblado está firmado con un certificado o
una clave asimétrica que tiene un inicio de sesión correspondiente con
permiso de EXTERNAL ACCESS ASSEMBLY.


Estoy intentando ver dónde he de darle el permiso oportuno.

Te agradecería mucho tu ayuda. Saludos.

me da este error:
Respuesta Responder a este mensaje
#3 martin
27/03/2008 - 10:37 | Informe spam
Hola

He de decir que martin=bogal. Es mi otra cuenta de correo

Ya he visto cómo conceder el permiso

USE master
GRANT EXTERNAL access assembly TO <inicio sesion>

El tema es que accedo al sql server con autenticación de windows, y no sé
cómo poner la instrucción gran

Muchas gracias de nuevo
Respuesta Responder a este mensaje
#4 Jesús López
27/03/2008 - 10:55 | Informe spam
Antes de crear el ensamblado ejecuta esto en el Management Studio:

ALTER DATABASE <base de datos> SET TRUSTWORTHY ON


Saludos:


Jesús López
www.solidq.com

"martin" escribió en el mensaje
news:
Hola de nuevo

Gracias, Jesús

Lo hago como dices

Ahora, al crear el ensamblado así:

CREATE ASSEMBLY clr
FROM 'C:\clr.dll' WITH permission_SET = external_access

Error de ejecución SQL.

Instrucción SQL ejecutada: CREATE ASSEMBLY clr FROM 'C:\Documents and
Settings\Martin\Mis documentos\Mis proyectos\Cresolia\bin\clr.dll' WITH
PERMISSION_SET = external_access
Origen del error: .Net SqlClient Data Provider
Mensaje de error: Error de CREATE ASSEMBLY para el ensamblado 'clr' porque
el ensamblado 'clr' no tiene autorización para PERMISSION_SET > EXTERNAL_ACCESS. El ensamblado está autorizado cuando se produce una de
las
siguientes situaciónes: el propietario de la base de datos tiene permiso
de
EXTERNAL ACCESS ASSEMBLY y la base de datos tiene definida la propiedad de
base de datos TRUSTWORTHY, o el ensamblado está firmado con un certificado
o
una clave asimétrica que tiene un inicio de sesión correspondiente con
permiso de EXTERNAL ACCESS ASSEMBLY.


Estoy intentando ver dónde he de darle el permiso oportuno.

Te agradecería mucho tu ayuda. Saludos.

me da este error:


Respuesta Responder a este mensaje
#5 martin
27/03/2008 - 11:21 | Informe spam
Hola

Muchísimas gracias, Jesús.

La verdad es que me tenía totalmente loco. Ya puedo cantar y todo :=)

Saludos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida