codigo almacenado

15/11/2004 - 23:47 por Gerardo | Informe spam
Buenas desarrolladores: estoy con un problema necesito ejecutar codigo en
tiempo de ejecucion, pero este codigo lo tendria que almacenar en base de
datos.
El codigo me sirviria para dar unos retoques que son muy variables en mis
reglas de negocio.
Este codigo que quisiera guardaria serian funciones y Sub's

Desde ya mil gracias

Saludos

Gerardo
 

Leer las respuestas

#1 Pedro Luna Montalvo, MVP
16/11/2004 - 02:51 | Informe spam
Saludos Gerardo,

Si bien no especificas en que lenguaje estaria escrito el codigo almacenado,
asumo que te refieres a VB.NET.

El siguiente es un simple codigo de una aplicacion de consola que te muestra
una alternativa.


Imports System.CodeDom.Compiler
Imports System.Reflection

Module Module1

' Esta funcion deberia retornar el codigo desde la base de datos
Function ObtenerCodigoDesdeBaseDatos() As String
Return "Class ClaseDinamica" & ControlChars.CrLf & _
"Sub Saludar(Mensaje As String)" &
ControlChars.CrLf & _
"System.Console.WriteLine(Mensaje)" &
ControlChars.CrLf & _
"End Sub" & ControlChars.CrLf & _
"End Class"
End Function


Sub Main()
' Obtener un CodeCompiler que corresponde a VB.NET
Dim Compilador As ICodeCompiler
Compilador = (New VBCodeProvider).CreateCompiler()

' Preparar las opciones del compilador
Dim parametros As New CompilerParameters()
parametros.GenerateInMemory = True ' Compilar en memoria!!!

' Compilar el código fuente!!
Dim resultado As CompilerResults
resultado = Compilador.CompileAssemblyFromSource(parametros,
ObtenerCodigoDesdeBaseDatos())

' Cargar el ensamblado y obtener el tipo
Dim tipo As Type =
resultado.CompiledAssembly.GetType("ClaseDinamica")

' Crear la instancia
Dim instancia As Object = Activator.CreateInstance(tipo)

' Invocar el método que muestra mensaje en consola
Dim metodo As MethodInfo = tipo.GetMethod("Saludar")
metodo.Invoke(instancia, New Object() {"Logramos compilar codigo
dinamicamente!!"})
End Sub
End Module

Espero te sirva


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

Preguntas similares