Adonet

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 13

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 Proveedor datos de Framework OLE DB Proveedor de Proporciona acceso de datos para Microsoft SQL Server .NET versin 7.0 o posterior. Utiliza el espacio de nombres para System.Data.SqlClient. de Para orgenes de datos que se exponen mediante OLE DB. .NET Utiliza el espacio de nombres System.Data.Sql. para de Para orgenes de datos que se exponen mediante ODBC.

datos de Framework ODBC Proveedor datos de Framework Oracle

.NET Utiliza el espacio de nombres System.Data.Odbc. para de Para orgenes de datos de Oracle. El proveedor de datos .NET de .NET Framework para Oracle es compatible con la para versin 8.1.7 y 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 Connection Descripcin Establece una conexin a un origen de datos determinado. La clase base para todos los objetos Connection es DbConnection. 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. 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. Llena un DataSet y realiza las actualizaciones necesarias en el origen de datos. La clase base para todos los objetos DataAdapter es DbDataAdapter. 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.

Command

DataReader

DataAdapter

CommandBuilder

Conexiones Para establecer la comunicacin con bases de datos, se utilizan las conexiones y se representan mediante clases especficas de proveedor, como SQLConnection o SqlConnection. Los comandos viajan por las conexiones y devuelven conjuntos de resultados en forma de secuencias que puede leer un objeto DataReader o que se pueden insertar en un objeto DataSet.

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( + (int) text1.text + , + text2.text + ,CN);

Conectar(); cmd.ExecuteNonQuery(); Desconectar(); Modificar una Fila de una tabla SqlCommand cmd = new SqlCommand(UPDATE Articulos SET( CodArt = + (int) text1.text + , Nombe= + text2.text + ,CN); Conectar(); cmd.ExecuteNonQuery(); Desconectar(); 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( DataViewRowState.Deleted); null, null,

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 DeleteCommand

Propiedades

InsertCommand,

UpdateCommand,

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);

También podría gustarte