Creación de un procedimiento almacenado de SQL Server con C#

SQL Server incorpora integrado el componente CLR del .NET Framework desde su versión 2005, lo que nos permite aprovechar “toda” la potencia de .NET para realizar nuestros desarrollos de bases de datos. Realmente los espacios de nombres que se admiten en esta integración son limitados. Tenemos un listado completo en Bibliotecas de .NET Framework admitidas.

Los tipos de elementos que podemos desarrollar gracias a esta integración con el CLR son: procedimientos almacenados, desencadenadores, agregados, funciones definidas por el usuario y tipos definidos por el usuario.

Para habilitar la integración CLR en SQL Server debemos ejecutar el siguiente script de configuración:

sp_configure 'show advanced options', 1;
go
reconfigure;
go
sp_configure 'clr enabled', 1;
go
reconfigure;

Veamos ahora un ejemplo de cómo desarrollar, implementar y ejecutar un procedimiento almacenado usando SQL CLR. Para ello vamos a utilizar Visual Studio 2010 y SQL Server 2008.

Desarrollo

Creamos un nuevo proyecto en Visual Studio utilizando la plantilla “Proyecto de base de datos SQL CLR de Visual C#”.

A continuación, elegimos la conexión de base de datos que queremos utilizar empleando el asistente y, una vez creado el proyecto, agregamos un nuevo elemento “Procedimiento almacenado”.

Desarrollamos la funcionalidad del procedimiento almacenado, en este ejemplo recibe como parámetros el nombre y apellidos de un cliente y lo inserta en la tabla correspondiente:

[SqlProcedure]
public static void InsertarCliente(string nombre, string apellidos)
{
    using (SqlConnection conexion = new SqlConnection("context connection=true"))
    {
        SqlCommand comando = new SqlCommand("insert into Cliente (Nombre, Apellidos) values (@Nombre, @Apellidos)", conexion);
        comando.Parameters.Add(new SqlParameter("@Nombre", SqlDbType.NVarChar) { Value = nombre });
        comando.Parameters.Add(new SqlParameter("@Apellidos", SqlDbType.NVarChar) { Value = apellidos });

        conexion.Open();
        comando.ExecuteNonQuery();
        conexion.Close();
    }
}

Destacar en este código la cadena de conexión utilizada, que nos permite emplear el contexto de conexión en el que se ejecuta el procedimiento almacenado evitándonos tener que especificar servidor y credenciales.

Ejecución y depuración

Una vez implementado mediante Visual Studio, podemos ejecutar y depurar el procedimiento almacenado de manera sencilla mediante el “Explorador de servidores”:

Implementación

La implementación del procedimiento almacenado sin utilizar Visual Studio, en un entorno de producción por ejemplo, la llevamos a cabo mediante el siguiente código:

create assembly DemoSQLCLR from 'c:DemoSQLCLR.dll' with permission_set = safe
go
create procedure InsertarCliente
(
	@Nombre nvarchar(50),
	@Apellidos nvarchar(150)
)
as external name DemoSQLCLR.StoredProcedures.InsertarCliente

Y para retirar la implementación debemos ejecutar lo siguiente:

drop procedure InsertarCliente
go
drop assembly DemoSQLCLR

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *