tema 5-2 ado net

Upload: jonatan-ramos

Post on 19-Jul-2015

46 views

Category:

Documents


0 download

TRANSCRIPT

Programaci amb C# .NET

Tema 5 (g): ADO.NETJordi Linares i Pellicer

ndice! ! ! ! ! ! !

Introduccin Qu es ADO.NET? Clases y Objetos de ADO.NET Explorador de Servidores Orgenes de Datos Interfaz Conectada a Datos Programar con ADO.NET

Introduccin!

La mayora de las aplicaciones actuales guardan su informacin en bases de datos por lo que necesitan acceder a ellas ya sea de forma local o remota. La aparicin nuevas tecnologas como ADO.NET y los servicios de acceso a datos de .NET Framework han simplificado bastante la manipulacin de bases de datos. Con Visual Studio el acceso a bases de datos desde las aplicaciones se convierte en una tarea bastante sencilla.

!

!

Qu es ADO.NET?!

ADO.NET es un avanzado modelo de Bases de Datos para acceder a SGBDR. Es la evolucin de ADO (ActiveX Data objects) y proporciona una serie de clases para acceder a datos actualizadas al entorno .NET Incluye una serie de proveedores que actan como intermediarios entre la base de datos y la aplicacin:" " " "

!

!

SqlClient OracleClient OleDB ODBC

!

Objetivos de diseo de ADO.NET"

Acceso simple a datos. A travs de clases fciles de usar que representan tablas, filas y columnas de la BD. Extensibilidad para soporte a diferentes orgenes de datos. Esto permite crear nuevos proveedores de datos para .NET, p.ej. MySQL. Soporte para aplicaciones multicapa. Es la arquitectura actual de las aplicaciones de negocios y comercio electrnico. ADO.NET utiliza XML para la comunicacin entre capas. Unificacin de XML y Acceso a Datos Relacionales. .NET est basado en XML y ADO.NET es el puente entre los datos relacionales y la estructura jerrquica de los documentos XML.

"

"

"

Clases y Objetos de ADO.NET!

Clases bsicas:

!

Objetos ADO.NET" "

Las clases de ADO.NET estn definidas en el espacio de nombres System.Data.

Trabaja en modo desconectado: El programa no requiere una conexin persistente con la BD. " La conexin se abre y se cierra cuando se necesita.

!

Objetos del proveedorTodos los objetos llevan el prefijo nico del proveedor: SqlXxxxxxx, OleDbXXXXXX,.etc:" "

Connection. Establece la conexin con el origen de datos. SqlConnection, OdbcConnection, Command. Recupera datos del proveedor. (SELECT * FROM). Ej: SqlCommand, OdbcCommand, OleDbCommand,. CommandBuilder. Permite hacer consultas SQL para modificar datos de objetos basados en una sola tabla. Ej: SqlCommandBuilder, OdbcCommandBuilder, DataReader. Permite recuperar datos de slo lectura y slo hacia delante de un origen de datos. Ej: SqlDataReader, OdbcDataReader, DataAdapter. Representa un conjunto de comandos SQL y una conexin al origen de datos para rellenar el objeto DataSet y actualizar los datos. Ej: SqlDataAdapter,

"

"

"

Explorador de Servidores!

La ventana se hace visible desde el men Ver#Explorador de Servidores. Permite abrir conexiones a datos y conectar con servidores para explorar sus bases de datos. Tambin permite crear nuevas bases de datos, definir tablas, acceder a su contenido, etc. Las conexiones se muestran en el nodo Conexiones de datos. Cada conexin representa un nodo que contiene: tablas, vistas, procedimientos almacenados, etc.

!

!

!

!

!

Conexin a una base de datos existente"

Desde el nodo Conexiones de Datos podremos conectar a una base de datos existente:

!

Creacin de una Base de Datos

1 3

2

!

Definicin de Tablas

" "

Al cerrar el diseador se le da nombre a la nueva tabla. La tabla creada aparece en el Explorador de servidores.

!

Edicin de una tabla"

Desde el explorador de servidores podremos efectuar sobre la tabla operaciones de insercin, modificacin, borrado, agrupacin, filtrado, etc.

Al editar la tabla, se est trabajando directamente con SQL Server 2005 que se encargar de almacenar y recuperar los datos, cumplir las restricciones, etc. " Al cerrar la edicin, los cambios son permanentes en la BD del servidor."

"

Desde la barra de herramientas Diseador de consultas se pueden disear consultas SQL.

Orgenes de Datos!

Con el Explorador de Servidores se obtienen las cadenas de conexin a las bases de datos. Estas cadenas de conexin nos permitirn definir uno o ms orgenes de datos. Un Origen de datos es un objeto de la aplicacin que representa un conjunto de datos que residen en algn lugar (normalmente SGBDR). Los orgenes de datos facilitan el acceso y edicin de los datos que la aplicacin necesita. Mostrar la ventana orgenes de datos: Datos#Mostrar Orgenes de datos.

!

!

!

!

!

Definicin de un origen de datos

"

Como resultado final se crea el conjunto de datos y se aade al proyecto:! !

Un esquema XSD con su estructura Un mdulo con la clase derivada de DataSet

"

Durante el diseo, el fichero app.config contiene la configuracin para la cadena de conexin a la BD:

"

Al compilar el proyecto se genera un fichero: .exe.config que guarda la configuracin de la cadena de conexin para la ejecucin. Se puede modificar para actualizar la ruta a la BD.

!

El diseador de conjuntos de datos"

El conjunto de datos es dinmico y durante el desarrollo de la aplicacin pueden volverse a configurar desde:! !

Configurar DataSet con el asistente o Editar DataSet con el diseador.

"

El Adaptador de datos acta como intermediario entre el SGBDR y el DataSet.

!

Asociar elementos de interfaz a tablas y columnas"

Desde orgenes de datos se puede configurar el control a emplear en el formulario para cada tipo de columna.NOTA: El formulario debe estar abierto en el diseador para que las listas desplegables aparezcan.

Asociaciones para la tabla Asociaciones para las columnas

Interfaz Conectada a Datos!

Los datos conectados se pueden mostrar en el formulario:En una Cuadrcula mediante el uso del control DataGridView, o " Vista detalle mediante el uso de controles: Label, TextBox, ListaBox, etc."

!

Desde la ventana Orgenes de datos se puede arrastrar al formulario la tabla entera o por columnas. El Diseador se encarga de establecer la propiedad DataBindings de cada control de forma adecuada. Si los controles se insertan directamente desde el Cuadro de herramientas se ha de establecer la propiedad DataBindings de forma manual.

!

!

Cuadrcula(DataGrid)

Vista Detalle Modo diseo Ejecucin

Programar con ADO.NET!

Leer datos con DataReader

. . . Using System.Data; Using System.Data.SqlClient; public partial class Form1 : Form { private SqlConnection maConnexio; public Form1() { InitializeComponent(); }

private void Form1_Load(object sender, EventArgs e) { // Cadena de connexi maConnexio = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=C:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\Data\northwnd.mdf; Integrated Security=True;Connect Timeout=30; User Instance=True"); }

private void butLlistarClients_Click(object sender, EventArgs e) { // Obrir la connexi maConnexio.Open(); // Crear el command SqlCommand maCommand = maConnexio.CreateCommand(); // Especificar la consulta SQL per al Command maCommand.CommandText = "SELECT CustomerID, ContactName, CompanyName from Customers"; // Executar el DataReader per al command SqlDataReader maReader = maCommand.ExecuteReader(); this.textBoxClients.Clear(); // Llegir les files while (maReader.Read()) { // mostrar les files en el textbox this.textBoxClients.Text += maReader["CustomerID"].ToString() + "\t\t" + maReader["ContactName"].ToString() + "\t\t"+ maReader["CompanyName"].ToString() + "\r\n"; this.textBoxClients.Refresh(); } // Tancar reader maReader.Close(); // Tancar la connexi maConnexio.Close(); } }

!

Actualizar datos con DataSet" " "

La actualizacin de datos se realiza con el objeto DataSet. Cada DataSet contiene un conjunto de objetos DataTable. Cada DataTable contiene objetos DataRow y DataColumn. que representan las filas y columnas de la tabla de la BD. Las tablas, filas y columnas del DataSet se pueden acceder por su ndice o por su nombre: Ejemplo:maDataSet.Tables["Customers"].Rows[n]

"

"

El DataSet se llena con el mtodo Fill() de un objeto DataAdapter.

"

La estructura para acceder a tablas, filas y columnas en el DataSet es la siguiente:

"{

Ejemplo:

public partial class Form1 : Form private SqlConnection maConnexio; private SqlDataAdapter maAdapter; private DataSet maDataSet; private void Form1_Load(object sender, EventArgs e) { // Cadena de connexi maConnexio = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=C:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\Data\northwnd.mdf; Integrated Security=True;Connect Timeout=30; User Instance=True"); // Crear el DataAdapter per actualitzar les dades maAdapter = new SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", maConnexio); // Crear el DataSet que contindr taules, files i columnes maDataSet = new DataSet(); // Omplir el DataSet usant la consulta prviament definida en el DataAdapter maAdapter.Fill(maDataSet, "Clients"); // Omplir la llista amb els noms del clients OmplirLlista(); }

private void OmplirLlista() { listBoxClients.Items.Clear(); for(int i=0; i=0) { textBoxNom.Text = (listBoxClients.SelectedItem).ToString(); textBoxNom.Focus(); } } private void btActualitzarNom_Click(object sender, EventArgs e) { if (textBoxNom.Text != "") { listBoxClients.Items[listBoxClients.SelectedIndex] = textBoxNom.Text; maDataSet.Tables[0].Rows[listBoxClients.SelectedIndex]["CompanyName"] = textBoxNom.Text; // actualitzar la BD maAdapter.Update(maDataSet, "Clients"); MessageBox.Show("BD Actualitzada"); textBoxNom.Clear(); } } private void btLlistarClients_Click(object sender, EventArgs e) { OmplirLlista(); }

!

Relacionar tablas en el DataSetCada DataSet contiene la propiedad Relations que es una coleccin de objetos DataRelation que representan las relaciones entre las tablas del DataSet. " Ejemplo: Customers i Orders de la BD NorthWind"

"

Para crear una relacin entre dos tablas usar el mtodo Add(, , ).!

Ejemplo:DataRelation custOrderRel=thisDataSet.Relations.Add("CustOrders", thisDataSet.Tables["Customers"].Columns["CustomerID"], thisDataSet.Tables["Orders"].Columns["CustomerID"]);

"

El mtodo GetChildRows() obtiene las filas hijas a partir de una fila de la tabla padre.!

Ejemplo: customerRow.GetChildRows(custOrderRel);

public partial class ClientsOrdres : Form { private SqlConnection maConnexio; private DataSet maDataSet; private SqlDataAdapter clientsAdapter; private SqlDataAdapter ordresAdapter; private DataRelation ClientOrdreRel; private void Form1_Load(object sender, EventArgs e) { // Cadena de connexi maConnexio = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=C:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\northwnd.mdf; Integrated Security=True;Connect Timeout=30; User Instance=True"); maDataSet = new DataSet(); // DataAdapters clientsAdapter = new SqlDataAdapter("SELECT * FROM Customers", maConnexio); clientsAdapter.Fill(maDataSet, "Clients"); ordresAdapter = new SqlDataAdapter("SELECT * FROM Orders", maConnexio); ordresAdapter.Fill(maDataSet, "Ordres"); //Relaci ClientOrdreRel = maDataSet.Relations.Add("ClientsOrdres", maDataSet.Tables["Clients"].Columns["CustomerID"], maDataSet.Tables["Ordres"].Columns["CustomerID"]); //carregar els clients al combobox de clients OmplirComboClients(); //mostrar les ordres del primer client DataRow RowClient = maDataSet.Tables["Clients"].Rows[0]; MostrarOrdresClient(RowClient); }

private void OmplirComboClients() { comboBoxClientes.Items.Clear(); foreach (DataRow d in maDataSet.Tables["Clients"].Rows) comboBoxClientes.Items.Add(d["CompanyName"] + " - " + d["CustomerID"]); comboBoxClientes.SelectedIndex = 0; } private void MostrarOrdresClient(DataRow RowClient) { listBoxOrdenes.Items.Clear(); foreach (DataRow d in RowClient.GetChildRows(ClientOrdreRel)) { DateTime fecha = System.Convert.ToDateTime(d["OrderDate"]); listBoxOrdenes.Items.Add(d["OrderID"] + " - " + d["CustomerID"] + " - " + d["EmployeeID"] + " - " + fecha.ToShortDateString() + " - " + d["ShipVia"] + " - " + d["ShipCity"] + " - " + d["ShipCountry"]); } } private void comboBoxClientes_SelectedIndexChanged(object sender, EventArgs e) { DataRow RowClient = maDataSet.Tables["Clients"].Rows[comboBoxClientes.SelectedIndex]; MostrarOrdresClient(RowClient); } }

Creacin de una BBDD con MySQL! ! ! !

Crear un nuevo usuario Crear una nueva tabla (asociada a un esquema) Crear campos e insertar informacin Dar permisos al usuario creado sobre la tabla creada

Creacin de una BBDD con MySQL!

Crear un nuevo usuario:

Creacin de una BBDD con MySQL!

Creando la tabla cliente:

Creacin de una BBDD con MySQL!

Insertando algunas filas:

Creacin de una BBDD con MySQL!

Insertando algunas filas:

Creacin de una BBDD con MySQL!

Asignando permisos de acceso a la tabla al usuario prova:

Creacin de una BBDD con MySQL!

Creando una aplicacin e insertando el componente MySQL:

Creacin de una BBDD con MySQLusing using using using using using using System; System.Collections.Generic; System.Linq; System.Text; System.Data; MySql.Data.MySqlClient; MySql.Data.Types;

namespace ConsoleApplication3 { class Program { static void Main(string[] args) { MySqlConnection maConexio = null; MySqlDataAdapter maAdapter; DataSet maDataSet; // Formem la cadena de conexi string cadenaconexio = "SERVER=127.0.0.1; PORT=3306; USER=prova; PASSWORD=prova; DATABASE=test;"; // Creem la conexi try { maConexio = new MySqlConnection(cadenaconexio); } catch (Exception e) { Console.WriteLine("Hi ha algn problema en la conexi amb la base de dades:\n" + e.Message); } string select = "SELECT * FROM client"; maAdapter = new MySqlDataAdapter(select, maConexio); maDataSet = new DataSet(); maAdapter.Fill(maDataSet, "client"); // Llistat de clients int numclients = maDataSet.Tables["client"].Rows.Count; for (int i = 0; i < numclients; i++) Console.WriteLine("Nombre: " + maDataSet.Tables["client"].Rows[i]["Nombre"] + " " + "Direccin: " + maDataSet.Tables["client"].Rows[i]["Direccion"]);

}

}

}

Creacin de una BBDD con MySQLMySqlConnection maConexio = null; MySqlDataAdapter maAdapter; DataSet maDataSet; // Formem la cadena de conexi string cadenaconexio = "SERVER=127.0.0.1; PORT=3306; USER=prova; PASSWORD=prova; DATABASE=test;"; // Creem la conexi try { maConexio = new MySqlConnection(cadenaconexio); } catch (Exception e) { Console.WriteLine("Hi ha algn problema en la conexi amb la base de dades:\n" + e.Message); } string select = "SELECT * FROM client"; maAdapter = new MySqlDataAdapter(select, maConexio); maDataSet = new DataSet(); maAdapter.Fill(maDataSet, "client"); // Llistat de clients int numclients = maDataSet.Tables["client"].Rows.Count; for (int i = 0; i < numclients; i++) Console.WriteLine("Nombre: " + maDataSet.Tables["client"].Rows[i]["Nombre"] + " " + "Direccin: " + maDataSet.Tables["client"].Rows[i]["Direccion"]);

Creacin de una BBDD con MySQL!

Resultado de la ejecucin: