Está en la página 1de 21

Jordi Linares i Pellicer

Programaci amb C# .NET


Tema 5 (g): ADO.NET
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 proveedor
Todos 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
!
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.
!
La ventana se hace visible desde el
men Ver#Explorador de Servidores.
!
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
2
3
!
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:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add
name="BD_Biblioteca.Properties.Settings.BibliotecaConnectionString"
connectionString="DataSource=.\SQLEXPRESS;
AttachDbFilename=&quot; I:\2007-2008 IES BATOI\DAE - C#
\Projectes c# 2005\BD_Biblioteca\FITXER SQL SERVER BD
BIBLIOTECA\Biblioteca.mdf&quot;;Integrated Security=True;
ConnectTimeout=30;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
"
Al compilar el proyecto se genera un fichero:
<NomAplicacion>.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.
Vista Detalle
Cuadrcula
(DataGrid)
Ejecucin
Modo diseo
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:
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();
}
"
Ejemplo:
private void OmplirLlista()
{
listBoxClients.Items.Clear();
for(int i=0; i<maDataSet.Tables[0].Rows.Count; i++)
listBoxClients.Items.Add(maDataSet.Tables[0].Rows[i]["CompanyName"]);
listBoxClients.Refresh();
listBoxClients.SelectedIndex = 0;
}
private void listBoxClients_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBoxClients.SelectedIndex>=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 DataSet
"
Cada 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(<nombreRel>, <colPadre>, <colHija>).
!
Ejemplo:
DataRelation custOrderRel=
thisDataSet.Relations.Add("CustOrders",
thisDataSet.Tables["Customers"].Columns["CustomerID"],
thisDataSet.Tables["Orders"].Columns["CustomerID"]);
"
El mtodo GetChildRows(<DataRelationObj>)
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 MySQL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data.MySqlClient;
using 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 MySQL
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 MySQL
!
Resultado de la ejecucin:

También podría gustarte