Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

26
Clase 9 Clase 9 Curso Microsoft .NET Curso Microsoft .NET I.S.F.T. N° 182 I.S.F.T. N° 182

Transcript of Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Page 1: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Clase 9Clase 9•Curso Microsoft .NETCurso Microsoft .NET

•I.S.F.T. N° 182I.S.F.T. N° 182

Page 2: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

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 punto dominio y al grupo adecuado en un solo punto administrativoadministrativo

Page 3: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

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

Page 4: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Agregando connection string al Agregando connection string al web.configweb.config

<configuration> <connectionStrings> <add name="northwind"

connectionString="server=(local);database=Northwind;Integrated

Security=SSPI" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>

Page 5: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Accediendo desde el código al Accediendo desde el código al web.configweb.config

SqlConnection connection = new SqlConnection( ConfigurationManager.ConnectionStrings["ADVENTUREWORKSConnectionString"].ConnectionString);

Acceso de lectura/escritura a Acceso de lectura/escritura a especificaciones de configuraciónespecificaciones de configuración..Ejemplo en C#:Ejemplo en C#:

Page 6: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

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 7: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

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 Almacenados Sólo consumen el tiempo de la obtención Sólo consumen el tiempo de la obtención

de datosde datos Permiten implementar mejores Permiten implementar mejores

mecanismos de autorización de accesomecanismos de autorización de acceso

Page 8: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

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 9: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Actualizando datos (SQL) (2)Actualizando datos (SQL) (2)

Procedimientos AlmacenadosProcedimientos Almacenados Más rápidosMás rápidos Má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 10: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Utilizando procedimientos Utilizando procedimientos almacenadosalmacenados Ejecutar cualquier sentencia SQL significaEjecutar cualquier sentencia SQL significa

Control de sintaxisControl de sintaxis Control de validez de los objetos implicadosControl de validez de los objetos implicados CompilaciónCompilación Cálculo del plan de ejecución (Query Plan)Cálculo del plan de ejecución (Query Plan) Ejecución y obtención de resultadosEjecución y obtención de resultados

Ejecutar cualquier procedimiento almacenado Ejecutar cualquier procedimiento almacenado significasignifica Ejecución y obtención de resultadosEjecución y obtención de resultados (el resto se realiza al guardar el PA en la base de (el resto se realiza al guardar el PA en la base de

datos)datos)

Page 11: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Objeto Command Representa una Instrucción SQL o un procedimiento

almacenado que ejecuta en un origen de datos Expone 4 métodos importantes para devolver datos:

ExecuteReader() ExecuteScalar() ExecuteNonQuery() ExecuteXMLReader()

Llamada a StoresProcedures utilizando Parameters Objeto Command especifico para cada proveedor:

SQLCommand ODBCCommand OLEDBCommand OracleCommand

ADO.NET 2.0ADO.NET 2.0A

DO

.NE

T 2

.0A

DO

.NE

T 2

.0

Page 12: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Objeto Command – Ejemplo 1 de SQLCommand

ADO.NET 2.0ADO.NET 2.0A

DO

.NE

T 2

.0A

DO

.NE

T 2

.0

Page 13: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Objeto Command – Ejemplo 2 de SQLCommand

ADO.NET 2.0ADO.NET 2.0A

DO

.NE

T 2

.0A

DO

.NE

T 2

.0

Page 14: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Objeto DataReader Forward-only / Read-only Acceso rápido a los datos Conectado al origen La conexión la maneja usted mismo Los datos se manejan por código o a través de

controles enlazados Usa pocos recursos

ADO.NET 2.0ADO.NET 2.0A

DO

.NE

T 2

.0A

DO

.NE

T 2

.0

Page 15: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Objeto DataReader – Ejemplo 1ADO.NET 2.0ADO.NET 2.0

AD

O.N

ET

2.0

AD

O.N

ET

2.0

Page 16: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Objeto DataReader – Ejemplo 2ADO.NET 2.0ADO.NET 2.0

AD

O.N

ET

2.0

AD

O.N

ET

2.0

Page 17: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Gestiona el intercambio de datos entre DataTables y un Data Source .Fill (DataSet o DataTable) .Update (DataSet o DataTable)

Provee relaciones entre tablas y columnas

El usuario puede saltarse los comandos Insert/Update/Delete

Objeto DataAdapterADO.NET 2.0ADO.NET 2.0

AD

O.N

ET

2.0

AD

O.N

ET

2.0

Page 18: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

DataAdapterDataAdapterDataAdapterDataAdapter

SelectCommandSelectCommand

InsertCommandInsertCommand

UpdateCommandUpdateCommand

DeleteCommandDeleteCommand

TableMappingsTableMappings

DatabaseDatabaseDatabaseDatabase

DataTableDataTableDataTableDataTable

DataSetDataSetDataSetDataSet

Objeto DataAdapter

DataTableDataTableDataTableDataTableDataTableDataTableDataTableDataTable

Origen de Datos

AdaptadorConjunto de Resultados

ADO.NET 2.0ADO.NET 2.0A

DO

.NE

T 2

.0A

DO

.NE

T 2

.0

Page 19: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Rellenar: DataAdapter.Fill(DataTable)Objeto DataAdapter - Ejemplo

ADO.NET 2.0ADO.NET 2.0A

DO

.NE

T 2

.0A

DO

.NE

T 2

.0

Page 20: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Guardar Cambios: DataAdapter.Update(DataTable)Objeto DataAdapter - Ejemplo

ADO.NET 2.0ADO.NET 2.0A

DO

.NE

T 2

.0A

DO

.NE

T 2

.0

Page 21: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

DataBinding (Data Sources) Mecanismo de Enlaces entre Objetos contenedores

de datos (DataSet, WebService, DataBase) y los Controles WinForms

Operaciones automatizadas No requiere escribir código Permite Navegación, Edición de registros Múltiples Origenes de Datos:

DataSet Web Service’s DataBase

Se Establece en tiempo de Diseño

ADO.NET 2.0ADO.NET 2.0A

DO

.NE

T 2

.0A

DO

.NE

T 2

.0

Page 22: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Buenas PrácticasBuenas Prácticas

Las consultas deben ser específicas en Las consultas deben ser específicas en cuanto a las columnas que deben 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 23: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

Capa de acceso a datosCapa de acceso a datos

Encapsular 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 funcionalidades Definir en el mismo las funcionalidades esenciales parametrizadasesenciales parametrizadas 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

Page 24: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

PASOS A SEGUIR PARA METODOS DAO CON PASOS A SEGUIR PARA METODOS DAO CON INSERT, UPDATE y DELETE:INSERT, UPDATE y DELETE:

Crear objeto SqlConnection con la correspondiente Crear objeto SqlConnection con la correspondiente connection string.connection string.

Abrir la conexión (connection.Open()).Abrir la conexión (connection.Open()). Crear e instanciar objeto SqlCommand.Crear e instanciar objeto SqlCommand. Setear el tipo de comando (CommandType)Setear el tipo de comando (CommandType) Setear el CommandText con la query a ejecutar o el Setear el CommandText con la query a ejecutar o el

nombre del stored procedure.nombre del stored procedure. En caso de ser un stored procedure, crear En caso de ser un stored procedure, crear

SqlParameters necesarios y asignarle los valores.SqlParameters necesarios y asignarle los valores. Ejecutar el método ExecuteNonQuery() del objeto Ejecutar el método ExecuteNonQuery() del objeto

command.command. CERRAR LA CONEXIÓN: connection.Close()CERRAR LA CONEXIÓN: connection.Close()

Page 25: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

PASOS A SEGUIR PARA METODOS DAO CON PASOS A SEGUIR PARA METODOS DAO CON SELECT:SELECT:

Crear objeto SqlConnection con la correspondiente Crear objeto SqlConnection con la correspondiente connection string.connection string.

Abrir la conexión (connection.Open()).Abrir la conexión (connection.Open()). Crear e instanciar objeto DataSet para almacenar los Crear e instanciar objeto DataSet para almacenar los

resultados.resultados. Crear e instanciar objeto SqlCommand.Crear e instanciar objeto SqlCommand. Setear el tipo de comando (CommandType)Setear el tipo de comando (CommandType) Setear el CommandText con la query a ejecutar o el nombre Setear el CommandText con la query a ejecutar o el nombre

del stored procedure.del stored procedure. En caso de ser un stored procedure, crear SqlParameters En caso de ser un stored procedure, crear SqlParameters

necesarios y asignarle los valores.necesarios y asignarle los valores. Crear objeto SqlDataAdapter y pasarle en el constructor Crear objeto SqlDataAdapter y pasarle en el constructor

nuestro SqlCommand creado anteriormente.nuestro SqlCommand creado anteriormente. Ejecutar el método Fill() del SqlDataAdapter, pasándole por Ejecutar el método Fill() del SqlDataAdapter, pasándole por

parámetro nuestro DataSet donde se almacenaran los parámetro nuestro DataSet donde se almacenaran los resultados.resultados.

CERRAR LA CONEXIÓN: connection.Close()CERRAR LA CONEXIÓN: connection.Close()

Page 26: Clase 9 Curso Microsoft.NETCurso Microsoft.NET I.S.F.T. N° 182I.S.F.T. N° 182.

DemoDemo

Aplicando ADO.NET a Aplicando ADO.NET a nuestro proyectonuestro proyecto