Sei sulla pagina 1di 10

DIFERENCIAS DE

OBJETIVOS
En un documento en Word elabore un cuadro comparativo
entre objetos datatablecollection, dataadapter y objetos
datareader. Enva tu archivo a travs de este medio.
ADO.NET
ADO.NET es un conjunto de clases que exponen servicios de acceso a datos para el
programador de .NET. ADO.NET ofrece abundancia de componentes para la creacin de
aplicaciones de uso compartido de datos distribuidas. Constituye una parte integral de .NET
Framework y proporciona acceso a datos relacionales, XML y de aplicaciones. ADO.NET
satisface diversas necesidades de desarrollo, como la creacin de clientes de base de datos
de aplicaciones para usuario y objetos empresariales de nivel medio que utilizan
aplicaciones, herramientas, lenguajes o exploradores de Internet.
Arquitectura de ADO.NET

Componentes de ADO.NET
Existen dos componentes de ADO.NET que se pueden utilizar para obtener acceso a datos y
manipularlos:

Proveedores de datos de .NET Framework


El DataSet
Proveedores de datos de .NET Framework
Los proveedores de datos de .NET Framework son componentes diseados explcitamente
para la manipulacin de datos y el acceso rpido a datos de slo lectura y slo avance. El
objeto Connection proporciona conectividad a un origen de datos. El objeto Command
permite tener acceso a comandos de base de datos para devolver datos, modificar datos,
ejecutar procedimientos almacenados y enviar o recuperar informacin sobre parmetros.
El objeto DataReader proporciona una secuencia de datos de alto rendimiento desde el
origen de datos. Por ltimo, el objeto DataAdapter proporciona el puente entre el objeto
DataSet y el origen de datos. El DataAdapter utiliza objetos Command para ejecutar
comandos SQL en el origen de datos tanto para cargar el DataSet con datos como para
reconciliar en el origen de datos los cambios aplicados a los datos incluidos en el
DataSet.
DataSet
El DataSet de ADO.NET est expresamente diseado para el acceso a datos
independientemente del origen de datos. Como resultado, se puede utilizar con mltiples
y distintos orgenes de datos, con datos XML o para administrar datos locales de la
aplicacin. El DataSet contiene una coleccin de uno o ms objetos DataTable formados
por filas y columnas de datos, as como informacin sobre claves principales, claves

externas, restricciones y relaciones relativa a los datos incluidos en los objetos


DataTable.
En el diagrama siguiente se ilustra la relacin entre un proveedor de datos de .NET
Framework y un DataSet.

Elegir un DataReader o un DataSet


A la hora de decidir si su aplicacin debe utilizar un DataReader o un DataSet, debe tener
en cuenta el tipo de funcionalidad que su aplicacin requiere. Use un DataSet para hacer lo
siguiente:

Almacene datos en la memoria cach de la aplicacin para poder manipularlos. Si


solamente necesita leer los resultados de una consulta, el DataReader es la mejor
eleccin.
Utilizar datos de forma remota entre un nivel y otro o desde un servicio Web XML.
Interactuar con datos dinmicamente, por ejemplo para enlazar con un control de
formularios Windows Forms o para combinar y relacionar datos procedentes de varios
orgenes.
Realizar procesamientos exhaustivos de datos sin necesidad de tener una conexin
abierta con el origen de datos, lo que libera la conexin para que la utilicen otros clientes.
Si no necesita la funcionalidad proporcionada por el DataSet, puede mejorar el rendimiento
de su aplicacin si utiliza el DataReader para devolver sus datos de slo avance y de slo
lectura. Aunque el DataAdapter utiliza el DataReader para rellenar el contenido de un
DataSet (vea Llenar un DataSet desde un DataAdapter), al utilizar el DataReader puede
mejorar el rendimiento porque no usar la memoria que utilizara el DataSet, adems de
evitar el procesamiento necesario para crear y rellenar el contenido de DataSet.
Un proveedor de datos de .NET Framework sirve para conectarse a una base de datos,
ejecutar comandos y recuperar resultados. Esos resultados se procesan directamente o se
colocan en un DataSet de ADO.NET con el fin de exponerlos al usuario para un propsito
especfico, combinarlos con datos de varios orgenes o utilizarlos de forma remota entre
niveles. Los proveedores de datos de .NET Framework son ligeros, de manera que crean un
nivel mnimo entre el origen de datos y su cdigo, con lo que aumenta el rendimiento sin
sacrificar la funcionalidad.
En la tabla siguiente se muestran los proveedores de datos de .NET Framework que se
incluyen en .NET Framework.

Proveedores de datos de .NET Framework


Proveedor de datos Descripcin
de .NET Framework
Proveedor
datos
de
Framework
SQL Server

de Proporciona acceso de datos para Microsoft SQL Server versin 7.0 o


.NET posterior. Utiliza el espacio de nombres System.Data.SqlClient.
para

Proveedor
datos
de
Framework
OLE DB

de Para orgenes de datos que se exponen mediante OLE DB. Utiliza el


.NET espacio de nombres System.Data.Sql.
para

Proveedor
datos
de
Framework
ODBC

de Para orgenes de datos que se exponen mediante ODBC. Utiliza el


.NET espacio de nombres System.Data.Odbc.
para

Proveedor
datos
de
Framework
Oracle

de Para orgenes de datos de Oracle. El proveedor de datos de .NET


.NET Framework para Oracle es compatible con la versin 8.1.7 y
para posteriores del software de cliente de Oracle y utiliza el espacio de
nombres System.Data.OracleClient.

Objetos principales de los proveedores de datos de .NET Framework


En la tabla siguiente se describen los cuatro objetos centrales que constituyen un proveedor
de datos de .NET Framework.
Objeto

Descripcin

Connection

Establece una conexin a un origen de datos determinado. La clase base

para todos los objetos Connection es DbConnection.


Command

Ejecuta un comando en un origen de datos. Expone Parameters y


puede ejecutarse en el mbito de un objeto Transaction de
Connection. La clase base para todos los objetos Command es
DbCommand.

DataReader

Lee una secuencia de datos de slo avance y slo lectura desde un


origen de datos. La clase base para todos los objetos DataReader es
DbDataReader.

DataAdapter

Llena un DataSet y realiza las actualizaciones necesarias en el origen de


datos. La clase base para todos los objetos DataAdapter es
DbDataAdapter.

CommandBuil
der

Un objeto auxiliar que genera automticamente las propiedades de


comando de un DataAdapter o que obtiene de un procedimiento
almacenado informacin acerca de parmetros con la que puede rellenar
la coleccin Parameters de un objeto Command. La clase base para
todos los objetos CommandBuilder es DbCommandBuilder.

Conexiones
Para establecer la comunicacin con bases
representan mediante clases especficas
SqlConnection. Los comandos viajan por
resultados en forma de secuencias que puede
insertar en un objeto DataSet.

de
de
las
leer

datos, se utilizan las conexiones y se


proveedor, como SQLConnection o
conexiones y devuelven conjuntos de
un objeto DataReader o que se pueden

La propiedad principal asociada a un objeto de conexin es la propiedad ConnectionString.


Esta propiedad consta de una cadena con pares atributo/valor que proporciona la
informacin necesaria de inicio de sesin en un servidor de bases de datos y apunta a una
base de datos concreta. Una propiedad ConnectionString tpica tendra el siguiente aspecto:
Provider=SQLSQL.1;DataSource=MySQLServer;Initial
Catalog=NORTHWIND;Integrated Security=SSPI.
Ejemplo:
Void Conectar()
{
SqlConnection
CN
=
new
SqlConnection(Provider=SQLSQL.1;Data
Source=MySQLServer;Initial Catalog=NORTHWIND;Integrated Security=SSPI);
CN.Open();
}
Comandos
Una vez establecida una conexin a un origen de datos, puede ejecutar comandos y
devolver resultados desde el mismo mediante un objeto Command.
El objeto Command expone varios mtodos Execute que puede utilizar para llevar a cabo
la accin deseada. Cuando los resultados se devuelven en forma de secuencia de datos,
puede utilizar ExecuteReader para devolver un objeto DataReader. ExecuteScalar sirve
para devolver un valor Singleton. ExecuteNonQuery se utiliza para ejecutar comandos que
no devuelven filas.
Obtener un Unico valor (ExecuteScalar)
En ocasiones se debe devolver informacin de bases de datos consistente en un nico valor,
en lugar de una tabla o una secuencia de datos.
El objeto Command permite devolver valores nicos mediante el mtodo ExecuteScalar.
El mtodo ExecuteScalar devuelve como valor escalar el correspondiente a la primera
columna de la primera fila del conjunto de resultados.
Ejemplo: Obtener el precio de un articulo
SqlCommand cmd = new SqlCommand(SELECT precio FROM Articulos WHERE
codArt = + (int) text1.text,CN);
Conectar();
Text2.text = (string) cmd.ExecuteScalar();

Desconectar();

Ejecutar un Comando (ExecuteNonQuery)


ExecuteNonQuery se utiliza para ejecutar comandos que no devuelven filas.
Ejemplos:
Insertar una fila en una tabla.
SqlCommand cmd = new SqlCommand(INSERT INTO Articulos VALUES( +
text1.text + , + text2.text + ,CN);
Conectar();
cmd.ExecuteNonQuery();
Desconectar();

(int)

Modificar una Fila de una tabla


SqlCommand cmd = new SqlCommand(UPDATE Articulos SET( CodArt = +
text1.text + , Nombe= + text2.text + ,CN);
Conectar();
cmd.ExecuteNonQuery();
Desconectar();

(int)

Eliminar una Fila


SqlCommand cmd = new SqlCommand(DELETE FROM Articulos WHERE CodArt =
+ (int) text1.text, CN);
Conectar();
cmd.ExecuteNonQuery();
Desconectar();

Objetos DataReader
El objeto DataReader es, en cierto modo, sinnimo de un cursor de slo lectura y slo hacia
delante para datos. La API de DataReader es compatible con datos sin formato y con datos
jerrquicos. Cuando se ejecuta un comando en la base de datos, se devuelve un objeto
DataReader. El formato del objeto DataReader devuelto es distinto de un conjunto de
registros. Por ejemplo, podra utilizarse el objeto DataReader para mostrar los resultados
de una lista de bsqueda en una pgina Web.
La recuperacin de datos mediante DataReader implica crear una instancia del objeto
Command y de un DataReader a continuacin, para lo cual se llama a
Command.ExecuteReader a fin de recuperar filas de un origen de datos.
En el ejemplo siguiente se muestra cmo se utiliza un SqllDataReader, donde command
representa un objeto SqlCommand vlido.

Ejemplo: Llenar un ComboBox.


SqlCommand CMD = new SqlCommand( " SELECT Nombre FROM Articulos", CN);
Conectar
SqlDataReader Reader = CMD.ExecuteReader();
while (Reader.Read())
{
Combo1.Items.Add(Reader[0]);
}
Reader.Close();
Desconectar();

Trabajo con DataAdapters

Un DataAdapter se utiliza para recuperar datos de un origen de datos y llenar tablas con un
DataSet. El DataAdapter tambin resuelve los cambios realizados en el DataSet de vuelta
al origen de datos. Mediante el objeto Connection del proveedor de datos de .NET
Framework, DataAdapter se conecta a un origen de datos y utiliza objetos Command para
recuperar datos del origen de datos y resolver los cambios a dicho origen.

Llenar un DataSet desde un DataAdapter


DataSet de ADO.NET es una representacin residente en memoria de datos que proporciona
un modelo de programacin relacional coherente e independiente del origen de los datos.
DataSet representa un conjunto completo de datos que incluye restricciones y tablas, as
como relaciones entre estas ltimas. Dado que DataSet es independiente del origen de
datos, puede incluir datos locales de la aplicacin, as como datos de otros muchos orgenes.
La interaccin con los orgenes de datos existentes se controla mediante el DataAdapter.
La propiedad SelectCommand del DataAdapter es un objeto Command que recupera
datos del origen de datos. Las propiedades InsertCommand, UpdateCommand y
DeleteCommand de DataAdapter son objetos Command que permiten administrar las
actualizaciones de los datos en el origen de datos para reflejar las modificaciones
efectuadas en el DataSet.
El mtodo Fill del DataAdapter se usa para llenar un DataSet con los resultados de la
propiedad SelectCommand del DataAdapter. El mtodo Fill acepta como argumentos un
DataSet que se debe llenar y un objeto DataTable, o su nombre, que se debe llenar con las
filas que devuelve SelectCommand.
El mtodo Fill utiliza el objeto DataReader de forma implcita para devolver los nombres y
tipos de columna utilizados para crear las tablas de DataSet, as como los datos para llenar
las filas de las tablas de DataSet. Las tablas y columnas slo se crean cuando no existen;
en caso contrario, Fill utiliza el esquema existente de DataSet.

Ejemplo:

DataSet DS = new DataSet();


SqlDataAdapter DA = new SqlDataAdapter(SELECT * FROM Articulos);
Conectar();
DA.Fill(DS, Articulos);
Desconectar();

Crear y utilizar DataTables


Un objeto DataSet est formado por una coleccin de tablas, relaciones y restricciones. En
ADO .NET, los objetos DataTable se utilizan para representar las tablas de un DataSet. Un
objeto DataTable representa una tabla de datos relacionales de la memoria; los datos son
locales de la aplicacin basada en .NET en la que residen, pero se pueden llenar desde un
origen de datos como Microsoft SQL Server mediante un DataAdapter
Adems del esquema, un objeto DataTable debe tener tambin filas en las que albergar y
ordenar los datos. La clase DataRow representa los datos reales que contiene una tabla. La
clase DataRow, sus propiedades y mtodos se utilizan para recuperar, evaluar y manipular
los datos de una tabla. Cuando se tiene acceso a los datos de una fila y se cambian, el
objeto DataRow mantiene tanto su estado actual como el original.
En el siguiente ejemplo se crea una instancia de una DataTable agregndola a la coleccin
Tables de un DataSet.
DataTable DTarticulos = DS.Tables[Articulos];

Definir una clave principal para una tabla


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 clave principal.

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 primer ejemplo se
define una sola columna como clave principal.
DataColumn[] columns = new DataColumn[1];
columns[0] = DTarticulos.Columns["CodArt"];
DTarticulos.PrimaryKey = columns;

Ejemplo con dos Columnas


DataColumn[] columns = new DataColumn[2];
columns[0] = DTVentas.Columns["NroVta"];
columns[1] = DTVentas.Columns["CodArt"];
DTVentas.PrimaryKey = columns;

Definir una columna autonumerica en una tabla

DTVentas.Columns["NroVta"].AutoIncrement = true;
DTVentas.Columns["NroVta"].AutoIncrementSeed = -1;
DTVentas.Columns["NroVta"].AutoIncrementStep = -1;

Manipular datos en DataTable


Despus de crear una DataTable en un DataSet, se pueden realizar las mismas actividades
que al utilizar una tabla de una base de datos. Se puede agregar, ver, modificar y eliminar
datos en la tabla, supervisar los errores y eventos y consultar los datos de la tabla. Al
modificar los datos de una DataTable, tambin se puede comprobar si los cambios son
precisos y determinar si aceptarlos o rechazarlos mediante programacin.
Agregar datos a una tabla
Despus de crear una DataTable y definir su estructura usando columnas y restricciones, se
le pueden agregar nuevas filas de datos. Para agregar una nueva fila, declare una nueva
variable como tipo DataRow. Se devuelve un nuevo objeto DataRow cuando se llama al
mtodo NewRow. A continuacin, la DataTable crea el objeto DataRow basndose en la
estructura de la tabla, definida por la DataColumnCollection.
DataRow Row = DTarticulos.NewRow();
A continuacin, la fila recin agregada se puede manipular mediante un ndice o nombre de
columna, como se muestra en el siguiente ejemplo.
Row["CodArt"] = "1";
Row[Nombre] = "Tornillo";
Una vez que se han insertado datos en la nueva fila, se utiliza el mtodo Add para agregar
la fila a la DataRowCollection, como se muestra en el siguiente cdigo.
DTarticulos.Rows.Add(Row);
FILTROS

Ver datos en una tabla con el Mtodo SELECT

El mtodo Select se puede utilizar para devolver filas con valores de RowState o valores
de campo distintos. En el ejemplo siguiente se devuelve una matriz DataRow que hace
referencia a todas las filas que se han eliminado y se devuelve otra matriz DataRow que
hace referencia a todas las filas, ordenadas por Nombre, donde la columna CodArt es
mayor que 5.
DataRow[] deletedRows = DTarticulos.Select(

null, null, DataViewRowState.Deleted);

DataRow[]Rows = DTarticulos.Select("CodArt > 5", "Nombre ASC");

Para devolver una unica fila:


DataRow DR = DTArticulos.Select(CodRubro=1) [0];

Buscar Filas en un DataTable por la Primary Key


Int CodArt = 1;
DataRow DR = DTArticulos.Rows.Find(CodArt);

Si la clave Principal es compuesta se debe crear una coleccion de objetos:


Object[] PK = new Object[2];
PK[0]= TextBox1.Text;
PK[1]=TextBox2.Text;
DataRow DR = DTArticulos.Rows.Find(PK);

Filtrar Filas en un DataTable con DefaultView.


Solamente se muestran las filas que cumplen la condicin establecida. No se modifica el
contenido del dataTable.
DTArticulos.DefaultView.RowFilter = CodRubro=1;

Eliminar una fila de una tabla


Existen dos mtodos para eliminar un objeto DataRow de un objetoDataTable: el mtodo
Remove del objeto DataRowCollection y el mtodo Delete del objeto DataRow. Mientras
que el mtodo Remove elimina un objeto DataRow de la DataRowCollection, el mtodo
Delete nicamente lo marca para su eliminacin. La eliminacin propiamente dicha se
produce cuando la aplicacin llama al mtodo AcceptChanges. Si se usa Delete, se puede
comprobar mediante programacin qu filas estn marcadas para eliminacin antes de
eliminarlas. Cuando una fila est marcada para eliminacin, su propiedad RowState est
establecida en Deleted.
Si utiliza un DataSet o una DataTable en combinacin con un DataAdapter y un origen de
datos relacional, utilice el mtodo Delete de la DataRow para quitar la fila. El mtodo
Delete marca la fila como Deleted en DataSet o DataTable pero no la quita. En su lugar,
cuando el DataAdapter encuentra una fila marcada como Deleted, ejecuta el mtodo
DeleteCommand para eliminar la fila en el origen de datos. A continuacin se puede quitar
la fila permanentemente utilizando el mtodo AcceptChanges. Si utiliza Remove para
eliminar la fila, sta desaparecer por completo de la tabla, pero el DataAdapter no
eliminar la fila del origen de datos.
Ejemplo: Row.Delete ();
Actualizar orgenes de datos con DataAdapters
El mtodo Update de DataAdapter se llama para reflejar en el origen de datos todos los
cambios efectuados en un DataSet. El mtodo Update, al igual que el mtodo Fill, acepta
como argumentos una instancia de un DataSet y, de forma opcional, un objeto DataTable o
un nombre de DataTable. La instancia de DataSet es el DataSet que contiene los cambios
efectuados, mientras que la DataTable identifica la tabla desde la que se pueden recuperar
esos cambios.
Al llamar al mtodo Update, el DataAdapter analiza los cambios efectuados y ejecuta el
comando apropiado (INSERT, UPDATE o DELETE). Cuando el DataAdapter encuentra un
cambio en una DataRow, utiliza los comandos InsertCommand, UpdateCommand o
DeleteCommand para reflejarlo.
Si DataTable est asociado a una tabla de una base de datos o se ha generado a partir de
ella, puede usar el objeto DbCommandBuilder para generar automticamente los comandos
DeleteCommand, InsertCommand y UpdateCommand de DataAdapter.
El mtodo Update refleja en el origen de datos los cambios efectuados; sin embargo, puede
que otros clientes hayan modificado datos en el origen de datos desde el momento en que
se llen el DataSet. Para actualizar el DataSet con datos actuales, utilice el DataAdapter
y el mtodo Fill. De esta forma se agregan las filas nuevas a la tabla y se actualiza la
informacin en las filas ya existentes. El mtodo Fill determina si se va a agregar una nueva
fila o si se va a actualizar una fila existente mediante el examen de los valores de clave
principal de las filas del DataSet y las filas devueltas por SelectCommand. Si el mtodo
Fill encuentra un valor de clave principal para una fila del DataSet que coincide con un
valor de clave principal de una fila de los resultados devueltos por SelectCommand, ste
actualiza la fila existente con la informacin de la fila devuelta por SelectCommand y
establece el RowState de la fila existente en Unchanged. Si una fila devuelta por
SelectCommand tiene un valor de clave principal que no coincide con ninguno de los

valores de clave principal de las filas del DataSet, el mtodo Fill agrega una nueva fila con
un RowState de Unchanged.

Generar Comandos Automticamente


Si la DataTable est asignada a una nica base de datos o se ha generado a partir de ella,
puede utilizar el objeto DbCommandBuilder para generar automticamente el comando
DeleteCommand, InsertCommand y UpdateCommand del DbDataAdapter.
El requisito mnimo para que la generacin automtica de comandos funcione
correctamente consiste en establecer la propiedad SelectCommand. El esquema de tabla
que recupera la propiedad SelectCommand determina la sintaxis de las instrucciones
INSERT, UPDATE y DELETE generadas automticamente.
DbCommandBuilder debe ejecutar SelectCommand con el objeto de poder devolver los
metadatos necesarios para construir los comandos SQL INSERT, UPDATE y DELETE. Por eso
es necesario realizar un viaje adicional al origen de datos, con el consiguiente efecto
adverso en el rendimiento. Para mejorar el rendimiento, debe especificar los comandos de
forma explcita, en lugar de utilizar DbCommandBuilder.
SelectCommand debe adems devolver al menos una clave principal o columna nica. Si
no hay ninguna, se inicia una excepcin InvalidOperation y no se genera ningn comando.
La generacin automtica de comandos tiene las siguientes limitaciones.
Slo tablas no relacionadas
La lgica de generacin automtica de comandos crea instrucciones INSERT, UPDATE o
DELETE para tablas independientes sin tener en cuenta las relaciones que stas puedan
tener con otras tablas en el origen de datos. Por eso, se puede producir un error al llamar a
Update para realizar cambios en una columna que participa en una restriccin de clave
externa en la base de datos. Para evitar esa excepcin, no utilice DbCommandBuilder al
actualizar las columnas que participan en una restriccin de clave externa. En este caso
debe especificar de forma explcita las instrucciones que se van a utilizar para llevar a cabo
la operacin.
Nombres de tabla y columna
La lgica de generacin automtica de comandos ocasiona un error cuando los nombres de
las tablas o columnas incluyen algn carcter especial, como espacios, puntos, signos de
exclamacin y otros caracteres no alfanumricos, aun en el caso de que se incluyan entre
corchetes. Se pueden utilizar nombres completos de tabla, como catalog.schema.table.

Ejemplo
Void Actualizar_BD(string Tabla, SqlDataAdapter DA)
{
SqlCommandBuilder builder = new SqlCommandBuilder(DA);
DataTable DTNewRows = DS.Tables[Tabla].GetChanges(DataRowState.Added);
DataTable DTModifRows = DS.Tables[Tabla].GetChanges(DataRowState.Modified);
DataTable DTDeletedRows = DS.Tables[Tabla].GetChanges(DataRowState.Deleted);
If (DTNewRows!= null)
{
DA.Update(DTNewRows)
DTNewRows.Dispose();
}
If (DTModifRows!= null)
{
DA.Update(DTModifRows)
DTModifRows.Dispose();
}
If (DTDeletedRows!= null)
{
DA.Update(DTDeletedRows)
DTDeletedRows.Dispose();
}

DS.Tables[Tabla].AcceptChanges();
}

Modificar las Propiedades InsertCommand, UpdateCommand, DeleteCommand

Ejemplo: Modificar la propiedad InsertCommand para devolver un valor identity


insertado.
SqlCommand cmd = new SqlCommand(INSERT INTO Articulos (nombre) values (@nombre)
SELECT * FROM Articulos WHERE codArt = Scope_Identity(),CN);
cmd.Parameters.Add(@nombre,SqlDbType.Varchar,50,nombre);
DA.InsertCommand = cmd;

Ejemplo: Modificar la propiedad DeleteCommand


SqlCommand cmd = new SqlCommand(DELETE FROM Articulos WHERE CodArt =
@CodArt,CN);
cmd.Parameters.Add(@CodArt,SqlDbType.Int,4, CodArt);
DA.DeleteCommand = cmd;

Ejemplo: Modificar la propiedad UpdateCommand


SqlCommand cmd = new SqlCommand(UPDATE Articulos SET nombre = @nombre WHERE
CodArt = @CodArt,CN);
cmd.Parameters.Add(@CodArt,SqlDbType.Int,4, CodArt);
cmd.Parameters.Add(@nombre,SqlDbType.Varchar,50,nombre);
DA.UpdateCommand = cmd;

Trabajar con datos relacionales


Un objeto DataSet puede contener tablas no relacionadas o tablas relacionadas. Se puede
considerar que un objeto DataSet es un documento de datos. De hecho, los documentos de datos
XML son as, con la diferencia de que se basan en un paradigma jerrquico. Como los datos se
suelen almacenar en bases de datos relacionales, el objeto DataSet puede controlar relaciones
jerrquicas y las relaciones de clave y clave externa. Las relaciones tambin pueden tener
distintos tipos de obligatoriedad. De forma predeterminada, las eliminaciones y actualizaciones
se aplican en cascada: si se elimina una fila de Categorias, tambin se eliminarn las filas
relacionadas de Articulos; si se actualiza la clave de una fila Categorias, tambin se actualizarn
los valores de clave externa asociados de la tabla Articulos.
Un objeto DataSet contiene una coleccin Relations. Es posible agregar una relacin a esta
coleccin mediante la columna (o las columnas, si la clave es de varias columnas) de las tablas
relacionadas.
DS.Relations.Add(art-cat,DS.Tables[Categorias].Columns[idCat],
DS.Tables[Articulos].Columns[idCat]);
Despus de agregar una relacin entre la clave idCat de la tabla Categorias y la clave externa
idCat de la tabla ARTICULOS del objeto DataSet, se pueden recorrer los datos.
foreach (DataRow myDataRow1 in DS.Tables["Categorias"].Rows)
{
Console.WriteLine("Categoria: " + myDataRow1["nombre"].ToString());
// Recorre articulos
foreach (DataRow myDataRow2 in myDataRow1.GetChildRows(DS.Relations["Articulos"]))
{
Console.WriteLine("Articulo #" + myDataRow2["idArt"].ToString());
}
}

Console.WriteLine();

Trabajar con Procedimientos Almacenados


Los procedimientos almacenados ofrecen numerosas ventajas en el caso de aplicaciones
que procesan datos. Mediante los procedimientos almacenados, las operaciones de bases de

datos se pueden encapsular en un solo comando, se optimizan para lograr el mejor


rendimiento y disfrutan de una seguridad adicional. Aunque es cierto que para llamar a un
procedimiento almacenado basta con pasar en forma de instruccin SQL su nombre seguido
de los argumentos de parmetros, el uso de la coleccin Parameters del objeto Command
de ADO.NET permite definir ms explcitamente los parmetros del procedimiento
almacenado, as como tener acceso a los parmetros de salida y a los valores devueltos.
Para llamar a un procedimiento almacenado, asigne el valor StoredProcedure a la
propiedad CommandType del objeto Command. Al asignar el valor StoredProcedure a
CommandType, puede usar la coleccin Parameters para definir parmetros, como se
muestra en el ejemplo siguiente.
Ejemplos:

1. Ejecutar en Proc. Almacenado que devuelve un conjunto de filas.


SqlCommand CMD = new SqlCommand(ArticuloxCat,oConn);
CMD.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter();
param.ParameterName = @idCat;
param.Value = 1;
param.Direction = ParameterDirection.Input ;
CMD.Parameters.Add(param);
Conectar();
SqlDataReader reader = CMD.ExecuteReader();
// Llenar DataTable o recorrer reader
Desconectar();

2. Ejecutar un Proc. Almacenado que devuelve un valor.


SqlCommand CMD = new SqlCommand(CantidadDeArticulos,oConn);
CMD.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter();
param.Name = @cantidad;
param.Direction = ParameterDirection.Output ;
CMD.Parameters.Add(param);
Conectar();
CMD.ExecuteNonQuery();
Desconectar();
Int valor = Convert.ToInt (CMD.Parameters[cantidad].Value);

Potrebbero piacerti anche