Developer's Diary

13 junio, 2013

El CLR de Sql Server Procedimientos almacenados en .NET (II)

Filed under: .net, BBDD, Tips — Etiquetas: , , , , , — jnavero @ 8:20 PM

En el capitulo anterior, vimos como crear un proyecto para el CLR. En esta ocasión voy a hablar de como hacer un procedimiento almacenado un poco mas complejo.

Aquí dejo un ejemplo y después lo comento e indico que hace cada cosa (Creo que es la mejor forma de ver las cosas).


Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.IO

Partial Public Class StoredProcedures
_
Public Shared Sub GuardaFicherodeDisco(rutaFichero As String, bbddtabla As String, campoBinario As String, condicion As String)
If Not File.Exists(rutaFichero) Then
SqlContext.Pipe.Send("El fichero no existe")
Return
End If
'Uso de la conexion del contexto
Using conexion As SqlConnection = New SqlConnection("context connection=true")
Using comando As SqlCommand = New SqlCommand("INSERT INTO " + bbddtabla + "(" + campoBinario + ") VALUES (@Fichero)", conexion)
Try
conexion.Open()
comando.Parameters.Add("@Fichero", SqlDbType.VarBinary).Value = File.ReadAllBytes(rutaFichero)
comando.ExecuteNonQuery()
Catch ex As Exception
SqlContext.Pipe.Send("Error: " + ex.Message)
Finally
conexion.Close()
End Try
End Using
End Using
End Sub
End Class

Esta función, lo que hace es guardar en una base de datos un fichero de nuestro disco duro. Presento un escenario curioso para después hacer otro post respecto a este procedimiento almacenado.

La primera clase que podemos ver es SqlContext, esta clase que no puede ser heredada contiene varias propiedades. Una de estas propiedades es Pipe, con pipe, podemos enviar mensajes de resultados o errores.

Si seguimos mirando el ejemplo, tenemos un objeto SqlConnection y otro SqlCommand. Con ellos realizo una conexión sobre la propia base de datos y ejecuto un comando que le paso por parámetro, en el caso del ejemplo hace un Insert al que le paso un parámetro. Posteriormente, defino dicho parámetro el cual se trata de un array de bytes.

Conclusión: Como hemos visto podemos usar el CLR del framework para crear procedimientos almacenados de gran potencia. En el siguiente post hablaré de un problema muy importante que esta funcionalidad tiene. Como dijo Benjamin Parker, “un gran poder conlleva una gran responsabilidad”

Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: