Vous êtes sur la page 1sur 65

Diplomado de

Especializacin en .NET
Modulo 2: Tecnologas de acceso a
datos

M.C. Gerardo Beltrn Gutirrez

Introduccin ADO .NET

Definicin
ADO.NET provee un acceso consistente entre
fuentes de datos, como MSSQL, OLEDB, XML, etc.
ADO.NET provee mecanismos para ejecutar
comandos y obtener los resultados.
Cada vez es ms comn codificar informacin en
XML para pasarla a trabes de conexiones de red.
Este modelo es muy diferente al modelo de la era
cliente/servidor donde se mantena una conexin
abierta durante la ejecucin de un programa.
ADO.NET fue diseado para las solucionar las
necesidades de este nuevo modelo, con una
arquitectura desconectada, integracin con XML,
representacin comn de los datos y la posibilidad de
combinar datos de varias fuentes de datos.

Proveedores de datos

Un proveedor de datos de .NET es usado para conectarse a una


base de datos, ejecutar comandos y obtener los resultados.

NET Provee los siguientes proveedores de datos:

MSSQL Server 7.0 o superior.


OLEDB
ODBC
ORACLE

Adems de estos hay varios otros proveedores de datos para otros


manejadores de bases de datos, como:

Npgsql para PostgreSQL


IBM DB2
SQL Lite
Sybase
Firebird e Interbase
MySQL
Db4objects
Etc.

Proveedores de datos
Es recomendable utilizar un proveedor de datos
especifico para el manejador de base de datos a
usar si esta est disponible, ya que este
aprovecha completamente las caractersticas de
este, mejorando el rendimiento y la funcionalidad
ofrecida.
La nomenclatura de las clases de ADO.NET es
sencilla. Dependiendo de el proveedor de datos
el nombre de las clases cambia, la nomenclatura
usada es <Proveedor>Nombre de clase.

ADO .NET Modelo


Desconectado

Definicin
ADO.NET permite el acceso desconectado a datos.
En este modelo se llena un DataSet a travs de
un DataAdapter.
Cada proveedor de datos debe de brindar su
DataAdapter, el cual debe de ser el encargado
de llenar un DataSet y actualizar la base de
datos segn los cambios en el DataSet.
El DataSet es una coleccin de DataTable, cada
una de ellas contiene DataRow y DataColumn.

DataSet
DataSet

DataTable
DataColumn

DataTable

DataRow

Relaciones
Esquema XML

XML

Restricciones

Clases del Modelo Desconectado


DataSet
DataTable
DataColumn
DataRow

Ejemplo
//Crea Dataset
Datos = new DataSet("CuentaBancaria");
//Crea un DataTable
DataTable tablaClientes = new DataTable("clientes");
DataColumn colNumcta = new DataColumn("numcta", typeof(int));
DataColumn colNombre = new DataColumn("nombre", typeof(string));
DataColumn colApellidos = new DataColumn(apellidos", typeof(string));
/ DataColumn colSaldo = new DataColumn("saldo", typeof(double));
// Crea las columnas para el DataTable
tablaClientes.Columns.Add(colNumcta);
tablaClientes.Columns.Add(colNombre);
tablaClientes.Columns.Add(colApellidos);
tablaClientes.Columns.Add(colSaldo);
// Agrega la Tabla al DataSet
Datos.Tables.Add(tablaClientes);

Ejemplo
// Crea nuevo Cliente
DataRow nuevoCliente = Datos.Tables["clientes"].NewRow();
// Asigna datos al nuevo cliente
nuevoCliente["numcta"] = 123;
nuevoCliente["nombre"] = "Claudia";
nuevoCliente[apellidos"] = "Lopez";
nuevoCliente["saldo"] = 1500.55;
// Agrega nuevo cliente a tabla de clientes
Datos.Tables["clientes"].Rows.Add(nuevoCliente);

Ejemplo
//Crea Dataset
Datos = new DataSet("CuentaBancaria");
//Crea un DataTable
DataTable tablaClientes = new DataTable("clientes");
// Crea las columnas para el DataTable
tablaClientes.Columns.Add(new DataColumn("numcta", typeof(int)));
tablaClientes.Columns.Add(new DataColumn("nombre", typeof(string)));
tablaClientes.Columns.Add(new DataColumn(apellidos, typeof(string)));
tablaClientes.Columns.Add(new DataColumn("saldo", typeof(double)));
// Agrega la Tabla al DataSet
Datos.Tables.Add(tablaClientes);
// Crea nuevo Cliente
DataRow nuevoCliente = Datos.Tables["clientes"].NewRow();
// Asigna datos al nuevo cliente
nuevoCliente["numcta"] = 123;
nuevoCliente["nombre"] = "Claudia";
nuevoCliente[apellidos"] = Lopez";
nuevoCliente["saldo"] = 1500.55;

Propiedades de Columna

Datatype. Establece el tipo de dato a almacenar, el valor prestablecido


es string

Unique . Permite la existencia de valores repetidos, el valor


prestablecido es false

AllowDBNull. Permite que no tenga informacin la columna, el valor


prestablecido es true.

Caption. Es el nombre de la columna por default es el valor establecido


en el constructor.

AutoIncrement. Establece si el campo es de auto incremento, el valor


prestablecido es n.

AutoIncrementSeed. Establece el valor inicial de la columna, el valor


prestablecido es 0.

AutoIncrementStep. Establece el incremento para un campo


incremental, el valor prestablecido es 1.

Columna como llave primaria


Generalmente, una tabla de base de datos tiene una columna o
grupo de columnas que identifican de manera exclusiva cada fila
de la tabla. Esta columna o grupo de columnas de identificacin
se denomina llave primaria.
Al identificar una nica DataColumn como la PrimaryKey para
una DataTable, la tabla establece automticamente la
propiedad AllowDBNull de la columna como false y la
propiedad Unique como true. Para las llaves primarias de
varias columnas slo se establece de forma automtica la
propiedad AllowDBNull en false.
La propiedad PrimaryKey de una DataTable recibe como valor
una matriz de uno o varios objetos DataColumn, como se
muestra en los ejemplos siguientes. En el ejemplo se define una
sola columna como llave primaria.
tablaClientes.PrimaryKey = new DataColumn[] {
tablaClientes.Columns["numcta"] };

Columnas Calculadas
En ocasiones es necesario contar con columnas
con informacin generada a partir de otras
columnas.

tablaClientes.Columns["NombreCompleto"].Expression =
"nombre + + apellidos";

Serializacin XML

WriteXML

Archivo
XML

Objeto
DataSet

ReadXML

Archivo
XML

Mtodos para Serializacin XML


DataSet ofrece manejo directo de documentos y
esquemas XML
ReadXml(string ArchXML)
ReadXmlSchema(string ArchXML)
WriteXml(string ArchXSD)
WriteXmlSchema(string ArchXSD)

Ejemplo
Datos = new DataSet();

// Guarda el esquema del DataSet


Datos.WriteXmlSchema(@"c:\users\gerardo\datos.xsd");
// Guarda ls Datos en formato xml
Datos.WriteXml(@"c:\users\gerardo\datos.xml");

// Recupera el esquema del DataSet


Datos.ReadXmlSchema(@"c:\users\gerardo\datos.xsd");
// Recupera los Datos en formato xml
Datos.ReadXml(@"c:\users\gerardo\datos.xml");

Eliminacin de DataRow
Delete (). Elimina un DataRow

Datos.Tables["clientes"].Rows[0].Delete();

Cambiar un DataRow

Datos.Tables["clientes"].Rows[0][cuenta]=890;
Datos.Tables["clientes"].Rows[0][nombre]=Jose;
Datos.Tables["clientes"].Rows[0][apellidos]=Lopez;

Control de Cambios
Mientras se estn realizando cambios en un
conjunto de datos mediante la actualizacin,
insercin y eliminacin de registros, el conjunto
de datos mantiene las versiones original y actual
de los registros.
Se puede realiza el seguimiento de la propiedad
RowState de cada fila para indicar si los
registros estn en su estado original o si se han
modificado, agregado o eliminado.

Control de Cambios
Se puede confirmar los cambios llamando al mtodo
AcceptChanges de DataSet, DataTable o DataRow.
Cada fila de datos contiene informacin sobre la
propiedad RowState ( Added, Modified, Deleted,
Unchanged).
Al llamar a AcceptChanges, cualquier objeto
DataRow que an est en el modo de edicin finaliza
correctamente el proceso de edicin. La propiedad
RowState de cada DataRow tambin cambia; las
filas en estado Added y Modified se convierten en
Unchanged, y se quitan las filas Deleted.

Control de Cambios
Al llamar a AcceptChanges, cualquier objeto
DataRow que an est en el modo de edicin
finaliza correctamente el proceso de edicin. La
propiedad RowState de cada DataRow tambin
cambia; las filas en estado Added y Modified se
convierten en Unchanged, y se quitan las filas
Deleted.

Al invocar al mtodo RejectChanges se cancelar


cualquier edicin, la fila vuelve a sus valores
anteriores y la propiedad RowState permanece
sin cambios.

Busquedas en DataTable
Select(). Obtiene una vector de todos los objetos
DataRow
DataRow []info =null;
info = Datos.Tables["clientes"].Select();
if (info != null)
{
for (int i = 0; i < info.Length;i++ )
Console.WriteLine("{0} {1}",info[i]["numcta"], info[i]["nombre"]);
}

Busquedas en DataTable
Select (string criterio). Obtiene una vector de
todos los objetos DataRow que coinciden con los
criterios de filtro por orden de clave principal (o si
sta no existe, por orden de adicin).
info = Datos.Tables["clientes"].Select("nombre = 'claudia ");
if (info != null)
{
for (int i = 0; i < info.Length; i++ )
Console.WriteLine("{0} {1}",info[i]["numcta"], info[i]["nombre"]);
}

Busquedas en DataTable
Select(string criterio, string ordenar). Obtiene
una matriz de todos los objetos DataRow que
coinciden con los criterios de filtro, en el criterio
de ordenacin especificado.
info = Datos.Tables["clientes"]. Select("numcta< 10020", "nombre ASC");
if (info != null)
{
for (int i = 0; i < info.Length; i++ )
Console.WriteLine("{0} {1}",info[i]["numcta"], info[i]["nombre"]);
}

Buscar un DataRow
Find(ClavePrincipal) Obtiene la fila especificada
por el valor de clave principal. Obtiene la fila
especificada por el valor de clave principal.
// Busca numcta (Numero de Cuenta )
DataRow reg = Datos.Tables["clientes"].Rows.Find(10038);
if (reg != null)
{
Console.WriteLine("{0} {1}", reg["numcta"], reg["nombre"]);
}

Ejercicio
Desarrolle una aplicacin para el control del acervo bibliogrfico de
una biblioteca, tome en cuenta que se tienen libros con prstamo
a domicilio.
El programa debe contar con lo siguiente:
a)
b)
c)
d)
e)

Adquirir nuevo libro.


Adquirir mas libros de alguno registrado
Prestar un libro (si es posible ya que siempre deber quedar
uno en la biblioteca)
Retornar un Libro.
Mostar una lista de libros con la existencia disponible

Agregue al programa la posibilidad de recuperar y guardar la


informacin de los libros en algn archivo.

Ejercicio
Desarrolle una programa que mantenga el control de los
empleados de una empresa tomando en cuenta que se
tienen los datos personales del empleado (cdigo,
nombre, apellidos), una relacin de los nombres de los
distintos departamentos, as como otra relacin de los
puestos existentes con su respectivo sueldo.
No olvide que cada empleado pertenece a un
departamento y cuenta con un puesto.
El programa debe agregar nuevos empleados,
departamentos o puestos, adems de emitir un listado de
los empleados registrados y aunado a de los reportes de
los distintos departamentos y puestos.
Es importante que los datos sean almacenados y
recuperados de un archivo.

Relaciones en DataSet

padreCol

Tabla Padre

DataRelation

hijaCol
Tabla Hija
DataSet

Relaciones en DataSet
Crea una relacin

dsRecursosHumanos.Relations.Add(
"Departamento_Empleados",
dtDepartamentos.Columns["depID"],
dtEmpleados.Columns["empDepto"],
true
);

Relaciones en DataSet
Recuperacin de datos padre de una relacin
for (int i = 0; i < dtEmpleados.Rows.Count; i++) {
dsRecursosHumanos.Relations.Add(
// Recupera datos de la relacion"Departamento_Empleados",
dtDepartamentos.Columns["depID"],
DataRow drDepto =
dtEmpleados.Columns["empDepto"]
dtEmpleados.Rows[i].GetParentRow("Departamento_Empleados");
);
Console.WriteLine("{0} {1} {2} {3}", dtEmpleados.Rows[i]["empID"],
dtEmpleados.Rows[i]["empNombre"],
drDepto["depNombre"]
);
}

Relaciones en DataSet
Recuperacin de datos hijos de una relacin
for (int i = 0; i < dtDepartamentos.Rows.Count; i++)
{
// Muestra los departamentos
dsRecursosHumanos.Relations.Add(
Console.WriteLine(" Departamento {0} {1} ",
"Departamento_Empleados",
dtDepartamentos.Rows[i]["depID"],
dtDepartamentos.Columns["depID"],
dtDepartamentos.Rows[i]["depNombre"]);
dtEmpleados.Columns["empDepto"]
// Recupera Datos de empleados del departamento
);
DataRow[] drEmpleados = dtDepartamentos.
Rows[i].GetChildRows("Departamento_Empleados");
// Muestra los empleados del departamento
foreach (DataRow emp in drEmpleados ){
Console.WriteLine("{0} {1} {2}",emp["empID"],
emp["empNombre"],
emp["empApellidos"]);
}

Actualizacin y eliminacin en cascada


Al establecer una relacin entre tablas se
establece restricciones que al hacer
actualizaciones o eliminaciones en la tabla padre
se aplican en cascada a la tabla hija.

Ejercicio
Del Ejercicio anterior emita un reporte de los
empleados por departamento y de los
empleados por puesto, as como eliminar
empleados, departamento o puesto.

Restricciones en DataSet
Se pueden utilizar restricciones con el fin de
mantener la integridad de los datos. Una restriccin
es una regla automtica que se aplica a una columna
relacionada, que determina cmo proceder cuando
se modifica de alguna manera el valor de una fila.
Existen dos tipos de restricciones en ADO.NET:
ForeignKeyConstraint y UniqueConstraint. De
forma predeterminada, las dos restricciones se crean
automticamente al crear una relacin entre dos o
ms tablas agregando DataRelation al DataSet. Sin
embargo, se puede deshabilitar este comportamiento
especificando false en el tercer parmetro al crear la
relacin.

Restricciones en DataSet
ForeignKeyConstraint
Esta regla establece cmo se propagan las
actualizaciones y eliminaciones a las tablas relacionadas.
Por ejemplo, si se actualiza o elimina el valor de una fila
de una tabla y el mismo valor tambin se utiliza en una o
varias tablas relacionadas, ForeignKeyConstraint
determinar qu sucede en las tablas relacionadas.
Las restricciones se aplican cuando la propiedad
System.Data.DataSet.EnforceConstraints del DataSet es
true
Las propiedades DeleteRule y UpdateRule de
ForeignKeyConstraint definen la accin que se ha de
realizar cuando el usuario intente eliminar o actualizar una
fila en una tabla relacionada.

Restricciones en DataSet

Establecimiento de reglas

Descripcin

Cascade

Elimina o actualiza las filas


relacionadas.

SetNull

Establece los valores de las filas


relacionadas en DBNull.

SetDefault

Establece los valores de las filas


relacionadas en el valor
predeterminado.

None

No realiza ninguna accin en las filas


relacionadas. Este es el valor
predeterminado.

Estos valores se encuentran en la enumeracin Rule

Restricciones en DataSet
Crear una Restriccin
ForeignKeyConstraint fkEmpleadosDeparatamento =
new ForeignKeyConstraint(
fkEmpleados_Departamentos",
dtDepartamentos.Columns["depID"],
dtEmpleados.Columns["empDepto"]);
fkEmpleadosDeparatamento.DeleteRule = Rule.None;
fkEmpleadosDeparatamento.UpdateRule = Rule.Cascade;
dtEmpleados.Constraints.Add(fkEmpleadosDepartamento);

Ejercicio
Complemente el Ejercicio anterior permitiendo
realizar actualizaciones a las claves y nombres
de departamento as como a las claves, nombres
de puesto y sueldo.

Ejercicio
Al ejercicio Biblioteca agregue la posibilidad de
mantener un catalogo de usuarios, los cuales
debern esta relacionados con los prestamos
realizados.
Debiendo adems contar con las opciones de
suspender usuario, activar y eliminar usuario
siempre y cuando no cuente con libros
prestados.

Fuentes de datos

WriteXML
DataAdapter

Objeto
DataSet

Base de
datos
SQL Server
MySQL
PostgreSQL
Oracle
Access

Archivo
XML

ReadXML

Archivo
XML

Acceso base de datos de SQL Server

Utilizar espacios de nombre


System.Data.SqlClient
System.Data.SqlTypes

Crear una conexin con SQL Server


Uso de SqlConnection
Establecer los parmetros de la cadena de
conexin

data source
initial catalog
uid
pwd
string strCon = @Data Source = miservidor.net;
Initial Catalog=inventario; UID=userdb; PWD=123;";
SqlConnection conexion = new SqlConnection(strCon);
conexion.Open();

Crear una conexin con SQL Server


Otro uso de SqlConnection
Establecer los parmetros de la cadena de
conexin

Server
DataBase
uid
pwd
string strCon =
@Server=miservidor.net;
DataBase=clientes; UID=userdb; PWD=123;";
SqlConnection conexion = new SqlConnection(strCon);
conexion.Open();

Creacin de Base de Datos y tablas en SQL


Server
CREATE DATABASE clientes;

USE clientes;

CREATE TABLE cuentas (numcta INT PRIMARY


KEY IDENTITY(1,1), nombre VARCHAR(40),
saldo DECIMAL);

DataSet con insercin en SQL Server


Define cadena de conexin
string cadenaConexion = @"server=db.gerardobeltran.net;
DataBase=clientes;uid=techsoft;
pwd=12AB34cd";
// Establece Objeto de Conexin
SqlConnection conexionSql = new SqlConnection(cadenaConexion);
//Abre Conexin con el servidor
conexionSql .Open();
// Crea objeto de Comando Select
SqlCommand comandoSelect = conexionSql.CreateCommand();
//Define Tipo de Instruccion a ejecutar (SQL)
comandoSelect.CommandType = CommandType.Text;
// Define Cadena Sql de consulta
string cadenaSql = @"SELECT * FROM cuentas";
// Establece cadena Sql para el comando Select
comandoSelect.CommandText = cadenaSql;
//

DataSet con insercin en SQL Server


// Crea objeto adaptador de datos
SqlDataAdapter daClientes = new SqlDataAdapter(comandoSelect);
// Crea Comando de construccion de intrucciones SQL
SqlCommandBuilder cbClientes = new SqlCommandBuilder(daClientes);
// Crea Data ser para contener los datos de la consulta
DataSet dsClientes = new DataSet("Clientes");
// Obtiene el esquema de la tabla cuentas desde el servidor
daClientes.FillSchema(dsClientes, SchemaType.Source, "Cuentas");
// Obtiene los datos de la tabla cuentas desde el servidor
daClientes.Fill(dsClientes, "Cuentas");
// Crea una instancia de una nuevo registro
DataRow drCliente = dsClientes.Tables["Cuentas"].NewRow();
// Captura los nuevos datos
Console.Write("Nombre: "); drCliente["nombre"] = Console.ReadLine();
Console.Write("Saldo: ");drCliente["saldo"] =
Convert.ToDouble(Console.ReadLine());

DataSet insertando en SQL Server


// Agrega el nuevo registro la tabla del DataSet
dsClientes.Tables["Cuentas"].Rows.Add(drCliente);
Console.WriteLine("El numero de cuenta asignado es: {0}",
drCliente["numcta"]);
Envia los datos al servidor SQL
daClientes.Update(dsClientes, "Cuentas");
// Libera el DataSet
daClientes.Dispose();
//Libera el adaptador de datos
daClientes.Dispose();
// Cierra la conexion con el servidor
conexionSql.Close();

DataSet seleccionando desde SQL Server


Define cadena de conexin
string cadenaConexion = @"server=db.gerardobeltran.net;
DataBase=clientes;uid=techsoft;
pwd=12AB34cd";
// Establece Objeto de Conexin
SqlConnection conexionSql = new SqlConnection(cadenaConexion);
//Abre Conexin con el servidor
conexionSql .Open();
// Crea objeto de Comando Select
SqlCommand comandoSelect = conexionSql.CreateCommand();
//Define Tipo de Instruccion a ejecutar (SQL)
comandoSelect.CommandType = CommandType.Text;
// Define Cadena Sql de consulta
string cadenaSql = @"SELECT * FROM cuentas";
// Establece cadena Sql para el comando Select
comandoSelect.CommandText = cadenaSql;= cadenaSql;
//

DataSet seleccionando desde SQL Server


// Crea objeto adaptador de datos
SqlDataAdapter daClientes = new SqlDataAdapter(comandoSelect);
// Crea Comando de construccion de intrucciones SQL
SqlCommandBuilder cbClientes= new SqlCommandBuilder(daClientes);
// Crea Data ser para contener los datos de la consulta
DataSet dsClientes = new DataSet("Clientes");
// Obtiene el esquema de la tabla cuentas desde el servidor
daClientes.FillSchema(dsClientes, SchemaType.Source, "Cuentas");
// Obtiene los datos de la tabla cuentas desde el servidor
daClientes.Fill(dsClientes, "Cuentas");
// Crea una instancia del DataTable Clientes
DataTable dtClientes = dsClientes.Tables["Cuentas"];
for (int i=0; i<dtClientes.Rows.Count; i++){
Console.WriteLine("{0} {1} {2}", dtClientes.Rows[i]["numcta"],
dtClientes.Rows[i]["nombre"], dtClientes.Rows[i]["saldo"]);
}

Acceso base de datos de MySql


Instalar Proveedor de acceso a datos de Mysql.
Descargar de www.mysql.com

Agregar referencia a biblioteca de MySql en


Visual Studio desde la pestaa .NET
Utilizar espacios de nombre
MySql.Data.MySqlClient
MySql.Data.Types
MySql.Data.Common

Crear una conexin con MySQL


Uso de MySqlConnection
Establecer los parmetros de la cadena de
conexin

Server
DataBase
uid
pwd
string strCon =
@"server=miservidor.net;
DataBase=clientes;uid=userdb; pwd=123;";
MySqlConnection conexion = new MySqlConnection(strCon);
conexion.Open();

Crear una conexin con MySQL


Otro uso de MySqlConnection
Establecer los parmetros de la cadena de
conexin

data source
initial catalog
uid
pwd
string strCon = @"data source = miservidor.net;
initial catalog=inventario; uid=userdb; pwd=123;";
MySqlConnection conexion = new MySqlConnection(strCon);
conexion.Open();

Creacin de Base de Datos y tablas en


MySQL
CREATE DATABASE clientes;

USE clientes;

CREATE TABLE cuentas (numcta INT PRIMARY


KEY AUTO_INCREMENT, nombre
VARCHAR(40), saldo DECIMAL);

Acceso a Productos de Office


Para el caso de acceso a productos (Access y
Excel) de Office 2007 y 2010, se requiere de
proveedores actualizados por lo que es
necesario descargarlos gratuitos de
http://www.microsoft.com/eses/download/details.aspx?id=13255
El espacio de nombres requerido son:
System.Data.OleDb;

Crear una conexin con ACCESS


Uso de OleDbConnection
Establecer los parmetros de la cadena de
conexin
data source
Provider
Password
string strCon = @"Data Source=

c:\users\gerardo\archdb.accdb;
Provider=Microsoft.ACE.OLEDB.12.0;
Jet OLEDB:Database Password=123;";

OleDbConnection conexion = new OleDbConnection(strCon);


conexion.Open();

Crear una conexin con EXCEL


Uso de OleDbConnection
Establecer los parmetros de la cadena de
conexin
data source
Provider
Extended Properties
string strCon = @"Data Source=

c:\basededatos\archdb.xlsx;
Provider=Microsoft.ACE.OLEDB.12.0;
Extended Properties=Excel 12.0;";

OleDbConnection conexion = new OleDbConnection(strCon);


conexion.Open();

Relaciones entre tablas


En SQL Server
create table cuentas (
numcta int IDENTITY(100,1) PRIMARY KEY,
nombre varchar(40)
);
create table movimientos (
nummov int identity(1000,1) PRIMARY KEY,
tipo int,
cantidad decimal ,
movcta int references cuentas(numcta)
);

Relaciones entre tablas


string cadenaConexion = @"Data Source=servidordb.net;
Initial catalog=clientes;uid=sa;
pwd=12345678";
SqlConnection conexionSql = new SqlConnection(cadenaConexion);
conexionSql.Open();
// Crea adaptador para cada tabla
SqlDataAdapter daCuentas =
new SqlDataAdapter(@"SELECT * FROM cuentas",conexionSql);
SqlDataAdapter daMovimientos =
new SqlDataAdapter(@"SELECT * FROM movimientos", conexionSql);
// Crea DataSet
DataSet dsClientes = new DataSet("Clientes");
// Recupera informacin de la tabla cuentas desde la base de datos
daCuentas.FillSchema(dsClientes, SchemaType.Source, "Cuentas");
daCuentas.Fill(dsClientes, "Cuentas");
// Recupera informacin de la tabla movimientos desde la base de datos
daMovimientos.FillSchema(dsClientes, SchemaType.Source, "Movimientos");
daMovimientos.Fill(dsClientes, "Movimientos");

Relaciones entre tablas


// Agrega Una relacion Cliente-Movimientos
dsClientes.Relations.Add("Cliente_Movimientos",
dsClientes.Tables["cuentas"].Columns["numcta"],
dsClientes.Tables["movimientos"].Columns["movcta"]
false);
// Crea una instancia para cada tabla
DataTable dtClientes = dsClientes.Tables["Cuentas"];
DataTable dtMovimientos = dsClientes.Tables["Movimientos"];
// Muestra los clientes con sus movimientos
for (int i = 0; i < dtClientes.Rows.Count; i++){
Console.WriteLine("{0} {1} {2}", dtClientes.Rows[i]["numcta"],
dtClientes.Rows[i]["nombre"]);
DataRow[] Movs = dtClientes.Rows[i].GetChildRows("Cliente_Movimientos");
foreach (DataRow reg in Movs){
Console.WriteLine("{0} {1} {2}", reg["nummov"],
Convert.ToInt32(reg["tipo"]) == 1) ? "Deposito" : "Retiro",
reg["cantidad"]);
}
}

Creando Comandos insert, update y delete


con ComandBuilder
string cadenaConexion = @"Data Source=servidordb.net;
Initial catalog=clientes;uid=sa;
pwd=12345678";
SqlConnection conexionSql = new SqlConnection(cadenaConexion);
conexionSql.Open();
// Crea adaptador para tabla cuentas
SqlDataAdapter daCuentas =
new SqlDataAdapter(@"SELECT * FROM cuentas",conexionSql);
// Crea comandos insert, update y delete
SqlCommandBuilder cbClientes = new SqlCommandBuilder(daCuentas);

Creando Comandos insert


string cadenaConexion = @"Data Source=servidordb.net;
Initial catalog=clientes;uid=sa;
pwd=12345678";
SqlConnection conexionSql = new SqlConnection(cadenaConexion);
conexionSql.Open();
// Crea adaptador para tabla cuentas
SqlDataAdapter daCuentas =
new SqlDataAdapter(@"SELECT * FROM cuentas",conexionSql);
// Crea comando insert
daCuentas.InsertCommand = new SqlCommand(@"insert into cuentas
(nombre, saldo) values (@nombre, @saldo)",conexionSql);
// Define parametros con el nombre de la columnas
daCuentas.InsertCommand.Parameters.Add(
new SqlParameter("@nombre", SqlDbType.VarChar,40, "nombre"));
daCuentas.InsertCommand.Parameters.Add(
new SqlParameter("@saldo", SqlDbType.Decimal,10, "saldo"));

Creando Comandos Update


string cadenaConexion = @"Data Source=servidordb.net;
Initial catalog=clientes;uid=sa;
pwd=12345678";
SqlConnection conexionSql = new SqlConnection(cadenaConexion);
conexionSql.Open();
// Crea adaptador para tabla cuentas
SqlDataAdapter daCuentas =
new SqlDataAdapter(@"SELECT * FROM cuentas",conexionSql);
// Crea comando update
daCuentas.InsertCommand = new SqlCommand(@"update cuentas set
nombre=@nombre, saldo=@saldo where numcta=@numcta", conexionSql);

// Define parametros con el nombre de la columnas


daCuentas.UpdateCommand = new SqlCommand(@"update cuentas set
nombre=@nombre, saldo=@saldo where numcta=@numcta", conexionSql);
daCuentas.UpdateCommand.Parameters.Add(
new SqlParameter("@nombre", SqlDbType.VarChar, 40, "nombre"));
daCuentas.UpdateCommand.Parameters.Add(
new SqlParameter("@saldo", SqlDbType.Decimal, 10, "saldo"));
daCuentas.UpdateCommand.Parameters.Add(
new SqlParameter("@numcta", SqlDbType.Int, 10, "numcta"));

Creando Comandos Delete


string cadenaConexion = @"Data Source=servidordb.net;
Initial catalog=clientes;uid=sa;
pwd=12345678";
SqlConnection conexionSql = new SqlConnection(cadenaConexion);
conexionSql.Open();
// Crea adaptador para tabla cuentas
SqlDataAdapter daCuentas =
new SqlDataAdapter(@"SELECT * FROM cuentas",conexionSql);
// Crea comando update
daCuentas.InsertCommand = new SqlCommand(
@"delete from cuentas where numcta=@numcta", conexionSql);
// Define parametros con el nombre de la columnas
daCuentas.DeleteCommand.Parameters.Add(
new SqlParameter("@numcta", SqlDbType.Int, 10, "numcta"));

Vous aimerez peut-être aussi