09.Programación SQL Parte 2

Transcription

09.Programación SQL Parte 2
Escuela de Informática y Telecomunicaciones
“Programación de Consultas SQL – ADO.Net”
LDP3501-2011 / DUOC-AV
En esta guía:
Procedimientos Almacenados ........................................................................................ 1
Procedimientos Almacenados (Stored Procedures) ..................................................... 1
Sintaxis de Procedimientos Almacenados ................................................................... 1
Recomendaciones y Nomenclaturas ........................................................................... 2
Acceso a Datos en ASP.Net con Procedimientos ............................................................. 4
Propiedades de SQLDatasource para procedimientos ................................................. 4
Escuela de Informática y Telecomunicaciones
Procedimientos Almacenados
Esta guía describe la forma de mostrar los datos del control GridView utilizando un procedimiento
almacenado. Un procedimiento almacenado es una consulta SQL almacenada en una base de datos de
Microsoft SQL Server y no en el código de la aplicación. Los procedimientos almacenados son más seguros
que el código de consulta y a menudo su ejecución es más rápida. El control SqlDataSource, puede recuperar
los resultados del procedimiento almacenado y servir como origen de datos del control GridView.
Procedimientos Almacenados (Stored Procedures)
Un procedimiento almacenado es un a consulta en lenguaje T-SQL (hablando de Microsoft SQL Server) que
se encuentra almacenada físicamente como un objeto de la base de datos.
La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario,
es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado.
Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de
regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos
salientes y entrantes.
Los usos típicos para los procedimientos almacenados incluyen la validación de datos siendo integrados a la
estructura de base de datos (los procedimientos almacenados utilizados para este propósito a menudo son
llamados disparadores; triggers en inglés), o encapsular un proceso grande y complejo.
Los procedimientos pueden ser ventajosos cuando una base de datos es manipulada desde muchos
programas externos. Al incluir la lógica de la aplicación en la base de datos utilizando procedimientos
almacenados, la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es
reducida. Esto puede simplificar la creación y, particularmente, el mantenimiento de los programas
involucrados.
Sintaxis de Procedimientos Almacenados
La sintaxis básica de declaración de un procedimiento almacenado se muestra a continuación:
CREATE PROCEDURE <Nombre_Procedimiento>
-- Declaración de parámetros
<@Nombre_Parametro1> <Tipo_Dato> = <Valor_Default>
[,<@Nombre_Parametro1> <Tipo_Dato> = <Valor_Default>]
AS
BEGIN
-- Sentencia T-SQL del procedimiento
END
GO
Para un mayor detalle de las distintas opciones de creación y manejo de procedimientos almacenados, debe
recurrir a la ayuda en línea que provee SQL Server 2008.
A continuación se presenta un ejemplo de un procedimiento almacenado de consulta, el cual retornará
todos los registros de una tabla que cumple con criterio basado en el parámetro recibido:
Página 1
Escuela de Informática y Telecomunicaciones
CREATE PROCEDURE SEL_PERSONAS
@Pais int
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM Personas
WHERE IdPais = @Pais
END
GO
El procedimiento almacenado quedará guardado como un objeto de la base de datos. Si es requerida alguna
modificación al código que lo define, se debe utilizar la instrucción ALTER en lugar de CREATE, como se
muestra en el siguiente ejemplo:
ALTER PROCEDURE SEL_PERSONAS
@Pais int
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM Personas
WHERE IdPais <> @Pais /* Cambio en la comparación */
END
GO
Una vez que el procedimiento ha sido creado en la base de datos, este puede ser accedido como tal
mediante las clases de acceso a datos (SqlCommand) desde el código .Net, para ello se debe especificar que
el tipo de comando es CommandType.StoredProcedure.
Recomendaciones y Nomenclaturas
Es recomendado mantener algún estándar en la definición de los nombres de los procedimientos
almacenados.
La función principal que se les da a los procedimientos, tiene relación con un concepto llamado CRUD que
viene de un acrónimo en inglés para indicar: Creación (Create), Lectura (Read), Actualización (Update) y
Eliminación (Delete). Por lo tanto la nomenclatura básica a definir debería estar guiada por estas
definiciones.
Para el caso de normar a nivel de los ejemplos y la codificación utilizaremos los siguientes prefijos para
nuestros procedimientos:
Función CRUD
Creación
Prefijo
INS_ de la sentecia INSERT
Página 2
Ejemplo
INS_PERSONA
Escuela de Informática y Telecomunicaciones
Función CRUD
Lectura
Prefijo
SEL_ de la sentencia SELECT asegurando un
solo resultado.
SEL_ALL, como variante cuando se trae un
conjunto de registros.
Ejemplo
SEL_PERSONA
SEL_ALL_PERSONA
Actualización
UPD_ de la sentencia UPDATE
UPD_PERSONA
Eliminación
DEL_ de la sentencia DELETE
DEL_PERSONA
Otros
CUS_ de la
personalizar
palabra
customizer
o
CUS_CONTAR_PERSONAS
Con las facilidades que se proveen en la herramienta de administración de SQL Server y demás software de
generación automática del CRUD, se recomienda que para cada tabla del modelo de datos soportado, se
cree tempranamente el CRUD completo de cada una de ellas. A posterior se irán agregando las
particularizaciones requeridas en cada caso.
Página 3
Escuela de Informática y Telecomunicaciones
Acceso a Datos en ASP.Net con Procedimientos
La aplicación desarrollada para conectarse a la base de datos en la actividad de “Controles enlazados a
datos”, se valió de la capacidad que nos provee el control SQLDataSource como fuente de datos y que
permite generar los Script SQL, para la recuperación y mantención de información. Estos script autogenerados, fueron utilizados por el control GridView y DropDownList, habilitando las funciones en base a la
configuración realizada al SQLDataSource.
Ahora poseemos procedimientos almacenados que encapsulan en la Base de Datos la lógica de ejecución
SQL, con lo cual podemos utilizar estos para poder realizar las funciones, eliminando la dependencia de los
script generados en la página ASPX.
Propiedades de SQLDatasource para procedimientos
Al momento de configurar el SQL DataSource de manera automática (botón Avanzado en la configuración
del comando Select), se han generado las instrucciones que permiten proveer las funciones de Inserción,
Eliminación y Actualzación, de manera adicional a la posibilidad de selección de los registros
(posteriormente filtrados).
Esta generación automática de script SQL está residente en la página ASPX como se muestra a continuación:
DeleteCommand="DELETE FROM [Empleado] WHERE [Rut] = @Rut"
InsertCommand="INSERT INTO [Empleado] ([Rut], [Dv], [Nombres], [Apellidos],
[Empresa]) VALUES (@Rut, @Dv, @Nombres, @Apellidos, @Empresa)"
SelectCommand="SELECT * FROM [Empleado] WHERE ([Empresa] = @Empresa)"
UpdateCommand="UPDATE [Empleado] SET [Dv] = @Dv, [Nombres] = @Nombres,
[Apellidos] = @Apellidos, [Empresa] = @Empresa WHERE [Rut] = @Rut">
<SelectParameters>
<asp:ControlParameter ControlID="ddlEmpresa" Name="Empresa"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="Rut" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="Dv" Type="String" />
<asp:Parameter Name="Nombres" Type="String" />
<asp:Parameter Name="Apellidos" Type="String" />
<asp:Parameter Name="Empresa" Type="Int32" />
<asp:Parameter Name="Rut" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="Rut" Type="Int32" />
<asp:Parameter Name="Dv" Type="String" />
<asp:Parameter Name="Nombres" Type="String" />
<asp:Parameter Name="Apellidos" Type="String" />
<asp:Parameter Name="Empresa" Type="Int32" />
</InsertParameters>
Como se visualiza se ha provisto de las instrucciones SQL y los respectivos parámetros de cada caso.
Página 4
Escuela de Informática y Telecomunicaciones
Lo interesante del código mostrado, es que identificamos los nombres de las propiedades donde se carga la
sentencia SQL, misma que podemos utilizar para enlazar la fuente de datos a los procedimientos creados
para cada caso. Además también se visualiza la definición de los respectivos parámetros asociados a cada
comando, estando estos definidos como valores planos rescatados desde el control enlazado o de controles
externos que pueden proveer el valor para el parámetro, como es el caso del DropDownList que provee el
parámetro para el filtro (Where) del comando de selección.
La siguiente tabla resume las principales propiedades para las respectivas funciones de consulta y
mantención del control SQLDataSource:
Accion
Selección
Eliminación
Actualización
Inserción
Propiedad
SelectCommand
Descripción
Define el script o nombre del procedimiento para
seleccionar los registros desde la fuente de datos.
SelectCommandType
Indica si el comando de selección es del tipo script
(SqlDataSourceCommandType.Text) ó un procedimiento
almacenado
(SqlDataSourceCommandType.StoredProcedure)
SelectParameters
Corresponde a la colección de parámetros utilizados en el
comando definido por la propiedad SelectCommand. Es del
tipo System.Web.UI.WebControls.ParameterCollection.
DeleteCommand
Define el script o nombre del procedimiento para eliminar
un registro en la fuente de datos.
DeleteCommandType
Indica si el comando de eliminación es del tipo script
(SqlDataSourceCommandType.Text) ó un procedimiento
almacenado
(SqlDataSourceCommandType.StoredProcedure)
DeleteParameters
Corresponde a la colección de parámetros utilizados en el
comando definido por la propiedad DeleteCommand. Es
del tipo System.Web.UI.WebControls.ParameterCollection.
UpdateCommand
Define el script o nombre del procedimiento para
actualizar un registro en la fuente de datos.
UpdateCommandType
Indica si el comando de actualización es del tipo script
(SqlDataSourceCommandType.Text) ó un procedimiento
almacenado
(SqlDataSourceCommandType.StoredProcedure)
UpdateParameters
Corresponde a la colección de parámetros utilizados en el
comando definido por la propiedad SelectCommand. Es del
tipo System.Web.UI.WebControls.ParameterCollection.
InsertCommand
Define el script o nombre del procedimiento para insertar
Página 5
Escuela de Informática y Telecomunicaciones
Accion
Propiedad
Descripción
un registro en la fuente de datos.
InsertCommandType
Indica si el comando de inserción es del tipo script
(SqlDataSourceCommandType.Text) ó un procedimiento
almacenado
(SqlDataSourceCommandType.StoredProcedure)
InsertParameters
Corresponde a la colección de parámetros utilizados en el
comando definido por la propiedad SelectCommand. Es del
tipo System.Web.UI.WebControls.ParameterCollection.
La interfaz de configuración del SQLDataSource en las Tareas del control, nos provee una interacción
amigable para poder realizar estas configuraciones, pero no se debe perder de vista el hecho que ellas
pueden ser asignadas mediante las respectivas propiedades. Para ello nos guiamos en el asistente y al
momento de indicar la sentencia SQL del comando Select, seleccionamos la opción para dar nosotros la
instrucción SQL o procedimiento almacenado, configurando en la ventana siguiente el procedimiento
almacenado para cada una de las instrucciones del CRUD. Si alguno de los procedimientos requiere algún
parámetro especial no posible de identificar, este será solicitado por separado antes de terminar con el
asistente.
Otro aspecto a distinguir entre la configuración por interfaz y por propiedades directas en el código es que
las propiedades <acción>Command y <acción>Parameters se presentan en la ventana de propiedades del
control como <acción>Query.
Página 6