Acceso a Datos Avanzado

26
Acceso a Datos Acceso a Datos avanzado avanzado Daniel Seara Daniel Seara

description

Material para Acceso a Datos estrella 3

Transcript of Acceso a Datos Avanzado

Page 1: Acceso a Datos Avanzado

Acceso a Datos avanzadoAcceso a Datos avanzado

Daniel SearaDaniel Seara

Page 2: Acceso a Datos Avanzado

La cadena de conexiónLa cadena de conexiónLa mejor seguridad, es la seguridad La mejor seguridad, es la seguridad integradaintegrada

Disminuye la posibilidad de acceso no Disminuye la posibilidad de acceso no autorizadoautorizadoFacilita el manejo de permisos de accesoFacilita el manejo de permisos de accesoNo requiere mayor mantenimiento del No requiere mayor mantenimiento del lado de la baselado de la base

Un nuevo usuario sólo debe agregarse al Un nuevo usuario sólo debe agregarse al dominio y al grupo adecuado en un solo dominio y al grupo adecuado en un solo punto administrativopunto administrativo

Page 3: Acceso a Datos Avanzado

La cadena de Conexión (2)La cadena de Conexión (2)Cuando no podemos acceder a la Cuando no podemos acceder a la seguridad del dominio, entonces seguridad del dominio, entonces usamos seguridad de SQL Serverusamos seguridad de SQL Server

Proveedores externos de sitiosProveedores externos de sitiosRequiere mayor cuidado en la Requiere mayor cuidado en la configuración de la cadena de configuración de la cadena de conexiónconexión

EncriptaciónEncriptaciónAlmacenamiento en ubicaciones no Almacenamiento en ubicaciones no comunescomunes

Page 4: Acceso a Datos Avanzado

Espacios de nombresEspacios de nombresSystem.DataSystem.DataSystem.Data.CommonSystem.Data.CommonSystem.Data.SqlClientSystem.Data.SqlClientSystem.Data.OleDbSystem.Data.OleDb……Microsoft.SqlServer.ServerMicrosoft.SqlServer.Server

Page 5: Acceso a Datos Avanzado

System.DataSystem.DataFundamento de la infraestructura de Fundamento de la infraestructura de acceso a datosacceso a datos

Contiene clases de definición base de los Contiene clases de definición base de los objetos de datosobjetos de datos

DataColumnDataColumnDataTypeDataTypeDataRowDataRowDataTableDataTableDataSetDataSet……

Page 6: Acceso a Datos Avanzado

System.Data.Common System.Data.Common Clases base que determinan la Clases base que determinan la funcionalidad de otras clases en los funcionalidad de otras clases en los espacios de nombres específicosespacios de nombres específicos

DbDataAdapterDbDataAdapterDbCommandDbCommandDbConnectionDbConnectionDbDataReaderDbDataReader……

Page 7: Acceso a Datos Avanzado

System.Data.SqlClientSystem.Data.SqlClientEspecífica para acceder a bases de Específica para acceder a bases de datos SQL Server© datos SQL Server©

Optimizada en su comunicación con Optimizada en su comunicación con dicha basedicha baseImplementa formas específicas de los Implementa formas específicas de los mismos objetos existentes en Common mismos objetos existentes en Common por herenciapor herencia

SqlDataAdapterSqlDataAdapterSqlCommandSqlCommandSqlConnectionSqlConnection……

Page 8: Acceso a Datos Avanzado

System.Data.OleDbSystem.Data.OleDbUtiliza los proveedores OleDb para Utiliza los proveedores OleDb para acceder a cualquier base de datos acceder a cualquier base de datos compatible, heredando de Commoncompatible, heredando de Common

OleDbDataAdapterOleDbDataAdapterOleDbCommandOleDbCommandOleDbConnectionOleDbConnection

Page 9: Acceso a Datos Avanzado

Microsoft.SqlServer.SerMicrosoft.SqlServer.Serverver

Permite acceder a funcionalidad de Permite acceder a funcionalidad de SQL Server© que no es común a otras SQL Server© que no es común a otras bases de datosbases de datos

Incluye la funcionalidad de Incluye la funcionalidad de implementación de CLR dentro de SQL implementación de CLR dentro de SQL Server 2005Server 2005

SqlContextSqlContextEl contexto en el cual se está ejecutando un El contexto en el cual se está ejecutando un assembly dentro de un servidor SQL Serverassembly dentro de un servidor SQL Server

SqlPipeSqlPipeObjeto utilizado para hacer que un CLR PA retorne Objeto utilizado para hacer que un CLR PA retorne un conjunto de datosun conjunto de datos

Page 10: Acceso a Datos Avanzado

DataAdapterDataAdapter

Obteniendo datos (CLR)Obteniendo datos (CLR)ConnectionConnection CommandCommand DataReaderDataReader

GetByte(n)GetByte(n)GetString(n)GetString(n)GetInt32(n)GetInt32(n)

……

ConnectionConnection CommandCommand DataReaderDataReader

DataSetDataSet

Page 11: Acceso a Datos Avanzado

TableAdapterTableAdapter

ConnectionConnection CommandCommand DataReaderDataReader

DataTableDataTable

DataAdapterDataAdapter

ConnectionConnection CommandCommand DataReaderDataReader

DataSetDataSet

Obteniendo datos (CLR) Obteniendo datos (CLR) (2)(2)

ConnectionConnection CommandCommand DataReaderDataReader

GetByte(n)GetByte(n)GetString(n)GetString(n)GetInt32(n)GetInt32(n)

……

Page 12: Acceso a Datos Avanzado

Obteniendo Datos (SQL)Obteniendo Datos (SQL)

SELECT Id, EsInternacional, EsRegional, EsGenerico, EsINETAFROM Oradores

SELECT *FROM Oradores

Page 13: Acceso a Datos Avanzado

Obteniendo Datos (SQL)Obteniendo Datos (SQL)Sentencias SQLSentencias SQL

Excepto que sean muy similares con Excepto que sean muy similares con alguna anterior, requieren un análisis alguna anterior, requieren un análisis completo cada vez que se ejecutancompleto cada vez que se ejecutan

Si sólo varía el valor de los argumentos Si sólo varía el valor de los argumentos utilizados, SQL Server es capaz de mantener utilizados, SQL Server es capaz de mantener en caché las sentencias en caché las sentencias

Procedimientos AlmacenadosProcedimientos AlmacenadosSólo consumen el tiempo de la obtención Sólo consumen el tiempo de la obtención de datosde datosPermiten implementar mejores Permiten implementar mejores mecanismos de autorización de accesomecanismos de autorización de acceso

Page 14: Acceso a Datos Avanzado

DataAdapter DataAdapter

TableAdapter TableAdapter

Actualizando datos (CLR)Actualizando datos (CLR)ConnectionConnection CommandCommand

ExecuteNonQueryExecuteNonQuery

ConnectionConnection CommandACommandA

CommandECommandE

CommandICommandI

UpdateUpdate

Page 15: Acceso a Datos Avanzado

Actualizando datos (SQL)Actualizando datos (SQL)ActualizarActualizar

InsertarInsertar

EliminarEliminar

UPDATE OradoresSET Nombre = 'Nombre', Apellido = 'Apellido', EsInternacional = 1where Id=3

INSERT INTO Oradores(Nombre, Apellido, EsInternacional)VALUES (N'Nombre', N'Apellido', 1)where Id=3

DELETE FROM Oradores WHERE (Id = 3)

Page 16: Acceso a Datos Avanzado

Actualizando datos (SQL) Actualizando datos (SQL) (2)(2)Procedimientos AlmacenadosProcedimientos Almacenados

Más rápidosMás rápidosMás segurosMás seguros

CREATE/ALTER Procedure [Oradores_Update]@Id int = null, @Nombre nvarchar(100) = null, @Apellido nvarchar(100) = null, @EsInternacional bit = null, @EsRegional bit = null, @Descripcion varchar(8000) = null, @UrlFoto nvarchar(100) = null, @EsGenerico bit = null, @EsINETA bit = null, @Passport nvarchar(200) = null, @EsAcademico bit = nulllAS Update [Oradores]SET

[Id]=@Id, [Nombre]=@Nombre, [Apellido]=@Apellido, [EsInternacional]=@EsInternacional, [EsRegional]=@EsRegional,[Descripcion]=@Descripcion, [UrlFoto]=@UrlFoto, [EsGenerico]=@EsGenerico, [EsINETA]=@EsINETA, [Passport]=@Passport, [EsAcademico]=@EsAcademico

where Id=@Id

Page 17: Acceso a Datos Avanzado

Utilizando procedimientos Utilizando procedimientos almacenadosalmacenadosEjecutar cualquier sentencia SQL Ejecutar cualquier sentencia SQL

significasignificaControl de sintaxisControl de sintaxisControl de validez de los objetos Control de validez de los objetos implicadosimplicadosCompilaciónCompilaciónCálculo del plan de ejecución (Query Cálculo del plan de ejecución (Query Plan)Plan)Ejecución y obtención de resultadosEjecución y obtención de resultados

Ejecutar cualquier procedimiento Ejecutar cualquier procedimiento almacenado significaalmacenado significa

Ejecución y obtención de resultadosEjecución y obtención de resultados(el resto se realiza al guardar el PA en la (el resto se realiza al guardar el PA en la base de datos)base de datos)

Page 18: Acceso a Datos Avanzado

Utilizando procedimientos almacenados Utilizando procedimientos almacenados (2)(2)

Los PA no son el mejor lugar para Los PA no son el mejor lugar para implementar lógica de negociosimplementar lógica de negocios

… … pero manipular grandes volúmenes pero manipular grandes volúmenes suele ser mejor dentro de la misma basesuele ser mejor dentro de la misma base

Cursores y tablas transitoriasCursores y tablas transitoriasArmas de doble filoArmas de doble filo

Consumen mucho proceso por implicar a la Consumen mucho proceso por implicar a la base tempdbbase tempdbNo se optimizan adecuadamente en su No se optimizan adecuadamente en su ejecución, ya que se debe recalcular el Query ejecución, ya que se debe recalcular el Query Plan sobre ellas según se agregan datosPlan sobre ellas según se agregan datos

Page 19: Acceso a Datos Avanzado

Asegurando la base de Asegurando la base de datosdatosNUNCA usar saNUNCA usar sa

Cuidar los datosCuidar los datosPermitir acceso a las tablas significa Permitir acceso a las tablas significa provocar un punto de desastreprovocar un punto de desastreSi se necesita autorizar el acceso directo Si se necesita autorizar el acceso directo a las tablas, considerar utilizar Vistasa las tablas, considerar utilizar VistasEn la medida de lo posible, denegar el En la medida de lo posible, denegar el acceso a las tablas, y permitir la acceso a las tablas, y permitir la ejecución de procedimientos ejecución de procedimientos almacenadosalmacenados

Page 20: Acceso a Datos Avanzado

Asegurando la base de datos Asegurando la base de datos (2)(2)

Page 21: Acceso a Datos Avanzado

Asegurando la base de datos Asegurando la base de datos (3)(3)

Page 22: Acceso a Datos Avanzado

Asegurando la base de datos Asegurando la base de datos (4)(4)

Page 23: Acceso a Datos Avanzado

Buenas PrácticasBuenas PrácticasLas consultas deben ser específicas Las consultas deben ser específicas en cuanto a las columnas que deben en cuanto a las columnas que deben devolverdevolver

Select * from tabla Select * from tabla Un error común: denominar los Un error común: denominar los procedimientos almacenados procedimientos almacenados comenzando con comenzando con sp_sp_

Sp_ significa “system procedure” no Sp_ significa “system procedure” no “Store procedure”“Store procedure”

Page 24: Acceso a Datos Avanzado

Capa de acceso a datosCapa de acceso a datosEncapsular la funcionalidad en un Encapsular la funcionalidad en un componente comúncomponente común

ReusableReusableNo vinculado a una base o aplicación en No vinculado a una base o aplicación en particularparticular

Definir en el mismo las Definir en el mismo las funcionalidades esenciales funcionalidades esenciales parametrizadasparametrizadas

Esto conlleva consumir más recursos de Esto conlleva consumir más recursos de conexión a la baseconexión a la baseImplementar caché de accionesImplementar caché de acciones

Page 25: Acceso a Datos Avanzado

Capa de acceso a datos Capa de acceso a datos (2)(2)DataServer

Class

PropertiesComandoNombreConexionTransaccion

MethodsAbortarTransaccionEjecutarFinalizeIniciarTransaccionLlenar (+ 1 overload)New (+ 1 overload)PrepararComandoTerminarTransaccionTraerValores

Page 26: Acceso a Datos Avanzado

Otras ReferenciasOtras ReferenciasArquitecturaArquitectura

http://www.microsoft.com/spanish/http://www.microsoft.com/spanish/msdn/arquitectura/default.asp msdn/arquitectura/default.asp

Data Access Application Block Data Access Application Block http://msdn.microsoft.com/practices/http://msdn.microsoft.com/practices/guidetype/appblocks/default.aspx?pull=/guidetype/appblocks/default.aspx?pull=/library/en-us/dnpag2/html/daab.asplibrary/en-us/dnpag2/html/daab.aspCommunity Enterpirse LibraryCommunity Enterpirse Library

http://www.gotdotnet.com/codegallery/http://www.gotdotnet.com/codegallery/codegallery.aspx?id=295a464a-6072-4e25-codegallery.aspx?id=295a464a-6072-4e25-94e2-91be6352732794e2-91be63527327