Ejecutar código VisualBasic .Net en de SQL Server | DevTroce.com

Ejecutar código VisualBasic .Net en Procedimientos Almacenados de SQL Server

Julio 25, 2010. Por GeekZero. Categorizado en Bases de Datos, Lenguajes de Programación, MsSQL, VB .Net. Un Comentario. Leido 584 veces.

En los últimos artículos estábamos escribiendo contenido destrozador sobre SQL Server & .Net, y me hizo pensar por que no hacer un MIX de ambas cosas en un sólo post para no perder la racha :D Esto me llevo a crear éste artículo en donde podremos escribir código en Visual Basic o CSharp .Net para ejecutarlo de un modo más integrado.

Los procedimientos CLR nos ofrece algunas ventajas sobre T-SQL:


Las cosas que vamos a necesitar son simple,

Paso 1. Habilitar la integración CLR en SQL Server 2008

Para que esto pueda correr en nuestro servidor de base de datos, primeramente debemos habilitar la ejecución de CLR en el mismo.

1
2
3
4
SP_CONFIGURE 'CLR ENABLE', 1;
GO
RECONFIGURE;
GO

Paso 2. Creando y compilando la clase VB

Ahora escribiremos nuestro código VB, lo haremos en cualquier editor de texto (les recomiendo notepad++) o incluso con Visual Studio para usar el IntelliSense, pero no lo compilaremos allí. El método recibirá un parámetro de entrada, más bien al efecto de mostrar como recibir parámetros con ésta técnica más que funcionalidad.

Luego obtenemos la conexión de nuestra BD para reutilizarla y crearemos una simple lectura con SQLReader y lo volcaremos al pipe.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.SqlServer.Server
Imports System.Data.SqlTypes   
 
Public Class Troce
	<Microsoft.SqlServer.Server.SqlProcedure()> _
	Public Shared Sub CLRClientes(ByVal nombre As SqlString)
		SqlContext.Pipe.Send("Devtroce para el mundo! Assembly invocado a las: " &amp; System.DateTime.Now.ToString())
		SqlContext.Pipe.Send("Hola " & Convert.ToString(nombre) & ", estos son los clientes que tenemos")
		Using oConnection As New SqlConnection("context connection=true")
			Try
				oConnection.Open()
				Dim oCommand As New SqlCommand( _
					"select * from clientes", oConnection)
				Dim oReader As SqlDataReader
				oReader = oCommand.ExecuteReader()
				SqlContext.Pipe.Send(oReader)
			Catch ex As Exception
					SqlContext.Pipe.Send(ex.ToString())
			End Try
		End Using
	End Sub
End Class

Este fichero lo guardaremos en

1
 C:\Devtroce\Dev.vb

Aun falta compilar y generar una .dll de ésta clase y lo haremos accediendo a la consola del SDK del framework, si tienen Visual Studio instalado lo pueden encontrar en:

1
 Inicio -> Todos los Programas --> Microsoft Visual Studio 2008 --> Visual Studio Tools --> Símbolo del sistema de Visual Studio 2008

o si solo tienen instalado el SDK en

1
 Inicio -> Todos los Programas --> Microsoft .NET Framework SDK v2.o --> SDK Command Prompt

Una vez que estamos en la consola escribimos la línea de comando correspondiente para compilar nuestra clase:

1
 vbc /t:library C:\Devtroce\Dev.vb

Paso 3. Registrando el ensamblado en SQL Server

Con esto ya estamos casi listos, nos queda registrar el Ensamblado en la Base de datos

1
2
CREATE ASSEMBLY Dev from 'c:\Devtroce\Dev.dll'   WITH PERMISSION_SET = SAFE;
Go

Con esto ya podremos crear un procedimiento almacenado que hace uso de la .dll, recibirá como entrada un parametros nvarchar, aquí es donde tenemos que cuidar unos aspectos, por cada entrada en la clase VB, debemos crear una entrada T-SQL, y deben estar mapeado en los tipos de datos T-SQL / CLR

es por eso que en la clase de VB coloque como tipo de datos SQLString y no String

Paso 4. Creando procedimientos CLR y ejecutarlos en SQL Server

1
2
3
4
CREATE PROCedure sp_DevTroce(@nombre as nvarchar(255))
AS
EXTERNAL NAME Dev.Troce.CLRClientes
Go

Con esto ya estamos hechos y podemos invocarles como cualquier otro SP

1
sp_DevTroce 'GeekZero';

Articulos Relacionados:

Etiquetas: , , ,

Comentario

Un Comentario en “Ejecutar código VisualBasic .Net en Procedimientos Almacenados de SQL Server” Hasta el momento.

  1. [...] This post was mentioned on Twitter by Ronald Riveros, DevTroce. DevTroce said: Ejecutar código VisualBasic .Net en Procedimientos Almacenados de SQL Server: En los últimos… http://goo.gl/fb/quMa8 [...]

Escribenos tu Comentario

Sigue los comentarios por RSS, suscribete a los feeds del comentario.