acceso a datos avanzado daniel seara. la cadena de conexión la mejor seguridad, es la seguridad...
Post on 21-Jan-2015
22 Views
Preview:
TRANSCRIPT
Acceso a Datos avanzadoAcceso a Datos avanzadoAcceso a Datos avanzadoAcceso a Datos avanzado
Daniel SearaDaniel Seara
La cadena de conexiónLa cadena de conexión
La mejor seguridad, es la seguridad La mejor seguridad, es la seguridad integradaintegrada
Disminuye la posibilidad de acceso no Disminuye la posibilidad de acceso no autorizadoautorizado
Facilita el manejo de permisos de accesoFacilita el manejo de permisos de acceso
No 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
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 sitios
Requiere 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ón
Almacenamiento en ubicaciones no Almacenamiento en ubicaciones no comunescomunes
Espacios de nombresEspacios de nombres
System.DataSystem.Data
System.Data.CommonSystem.Data.Common
System.Data.SqlClientSystem.Data.SqlClient
System.Data.OleDbSystem.Data.OleDb
……
Microsoft.SqlServer.ServerMicrosoft.SqlServer.Server
System.DataSystem.Data
Fundamento 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
DataColumnDataColumn
DataTypeDataType
DataRowDataRow
DataTableDataTable
DataSetDataSet
……
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
DbDataAdapterDbDataAdapter
DbCommandDbCommand
DbConnectionDbConnection
DbDataReaderDbDataReader
……
System.Data.SqlClientSystem.Data.SqlClient
Especí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 base
Implementa formas específicas de los Implementa formas específicas de los mismos objetos existentes en Common mismos objetos existentes en Common por herenciapor herencia
SqlDataAdapterSqlDataAdapter
SqlCommandSqlCommand
SqlConnectionSqlConnection
……
System.Data.OleDbSystem.Data.OleDb
Utiliza 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
OleDbDataAdapterOleDbDataAdapter
OleDbCommandOleDbCommand
OleDbConnectionOleDbConnection
Microsoft.SqlServer.SerMicrosoft.SqlServer.Serverver
Permite acceder a funcionalidad de Permite acceder a funcionalidad de SQL Server© que no es común a SQL Server© que no es común a otras bases de datosotras bases 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
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
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)
……
Obteniendo Datos (SQL)Obteniendo Datos (SQL)
SELECT Id, EsInternacional, EsRegional, EsGenerico, EsINETAFROM Oradores
SELECT *FROM Oradores
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
DataAdapter DataAdapter
TableAdapter TableAdapter
Actualizando datos (CLR)Actualizando datos (CLR)ConnectionConnection CommandCommand
ExecuteNonQueryExecuteNonQuery
ConnectionConnection CommandACommandA
CommandECommandE
CommandICommandI
UpdateUpdate
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)
Actualizando datos (SQL) Actualizando datos (SQL) (2)(2)Procedimientos AlmacenadosProcedimientos Almacenados
Más rápidosMás rápidos
Más segurosMás segurosCREATE/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
Utilizando procedimientos Utilizando procedimientos almacenadosalmacenados
Ejecutar cualquier sentencia SQL Ejecutar cualquier sentencia SQL significasignifica
Control de sintaxisControl de sintaxis
Control de validez de los objetos Control de validez de los objetos implicadosimplicados
CompilaciónCompilación
Cá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)
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 tempdb
No 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
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 desastre
Si se necesita autorizar el acceso directo Si se necesita autorizar el acceso directo a las tablas, considerar utilizar Vistasa las tablas, considerar utilizar Vistas
En 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
Asegurando la base de datos Asegurando la base de datos (2)(2)
Asegurando la base de datos Asegurando la base de datos (3)(3)
Asegurando la base de datos Asegurando la base de datos (4)(4)
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”
Capa de acceso a datosCapa de acceso a datosEncapsular la funcionalidad en un Encapsular la funcionalidad en un componente comúncomponente común
ReusableReusable
No 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 base
Implementar caché de accionesImplementar caché de acciones
Capa de acceso a datos Capa de acceso a datos (2)(2)DataServerClass
Properties
ComandoNombreConexionTransaccion
Methods
AbortarTransaccionEjecutarFinalizeIniciarTransaccionLlenar (+ 1 overload)New (+ 1 overload)PrepararComandoTerminarTransaccionTraerValores
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.asp
Community Enterpirse LibraryCommunity Enterpirse Libraryhttp://www.gotdotnet.com/codegallery/http://www.gotdotnet.com/codegallery/codegallery.aspx?id=295a464a-6072-4e25-codegallery.aspx?id=295a464a-6072-4e25-94e2-91be6352732794e2-91be63527327
top related