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