SlideShare una empresa de Scribd logo
1 de 50
Descargar para leer sin conexión
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
Desarrollo de Aplicaciones 
Capítulo 05 
ADO.Net
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Agenda 
•Repaso sesión anterior. 
•ADO.Net 
–Introducción 
–Arquitectura 
–Data Providers 
•Connection 
•Command 
•DataReader 
•DataAdapter 
–DataSet 
–LINQ 
–Clases Comunes 
–Escenario Conectado 
–Escenario Desconectado 
–Ejemplos 
•Que veremos la próxima sesión?
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Repaso sesión anterior 
•Arrays 
–Uni-dimensionales, Multidimensionales 
–Estructura interna 
–Arraystipo valor y tipo referencia 
–Iteración 
•Colecciones 
–ArrayList 
•Ver diapositivas previas.
ADO.Net 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Referencias 
1.Understanding .NET. Caps. 6 (AccesingData: ADO.Net) 
2.NET Framework Developer’s Guide: ADO.NET (http://msdn2.microsoft.com/en- us/library/e80y5yhx(VS.80).aspx) 
3.ApressPro ADO.NET.2.0.
ADO.Net 
•Idea de acceso a datos universal 
–Comunicación entre los lenguajes de programación y las bases de datos o fuentes de datos. 
–Modelo de programación uniforme mediante una API estándar. 
–Implementaciones especializadas para las fuentes de datos (providers). 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•Qué propone NET Framework? 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•ADO.NET 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) SQL-dataMS SQL Server, Oracle, Jet, Foxpro, ... SQL ServerOracleMySQL 
ODBCNon-SQL-dataDirectory Services, Mail, Text, Video, ... OLEDBADO.NET
ADO.Net 
•Qué es ADO.Net? 
–Es parte fundamental de NET Framework. 
–Es un modelo de objetos desarrollado por Microsoft. 
–Provee servicios de acceso a datos para múltiples fuentes de datos. 
•Bases de datos relacionales (RDBMS) 
•XML 
•Archivos Excel, Access, etc… 
–Provee componentes para crear aplicaciones web y distribuidas sobre diversas fuentes de datos. 
–Se accede mediante el namespaceSystem.Data. 
–Provee escenarios conectados y desconectados. 
–Es la evolución de Microsoft ADO (ActivexData Objects). 
–Provee una serie de interfaces y clases abstractas para implementaciones de terceros. (API Independendiente) 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•ADO.Net2.0 es una API Independiente 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Interfaces IDb* (ej: IDbConnection) clasesbase abstractasDb* (ej: DbConnection) Implementa la clase baseDb* Sql 
OleDbODBCOracle3rdParty 13rdParty 2Provider- Independiente del código de la aplicación en esta capa 
Provider- específico en el código de la aplicación en esta capa
ADO.Net 
•Arquitectura de ADO.NET (2 Componentes fundamentales) 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
–El DataSet 
•Son representaciones “en memoria” de los datos. 
•Independiente de la fuente de datos. 
•Puede utilizar múltiples fuentes de datos. 
•Proporciona un conjunto de objetos (DataTables, DataRow, etc.) 
•Utilizan XML para su persistencia. 
•Diseñado para escenarios “desconectados” 
–Los NET Framework Data Providers 
•Son un conjunto de objetos (Connection, Command, DataReader, DataAdapter). 
•Permiten la conexión a la fuente de datos. 
•Permiten obtener, modificar y datos. 
•Pueden ejecutar “StoredProcedures” y enviar/recibir parámetros
ADO.Net 
•Data Providers 
–Cualquier aplicación que utiliza ADO.Netaccede a la fuente de datos mediante un Provider. 
–Están programados en código manejado, pero pueden haber excepciones. 
–Permiten conectar a la BD, ejecutar comandos y obtener resultados 
–Está disponibles mediante sus respectivos Namespaces. 
•System.Data.SqlClient 
•System.Data.OracleClient 
•System.Data.OleDb 
–Cada Providerimplementa interfaces para sus objetos. 
–Se pueden implementar Providerspor terceros (MySQL, PostgreSQL, DB2, etc.) 
Desarrollo de aplicaciones .NETEduardo Rivera Alva-MCTS.Net(eriveraa@gmail.com)
ADO.Net 
•Data Providers-Implementaciones 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
.NET Framework data provider 
Description 
.NET Framework Data Provider for SQL Server 
Provides data access for Microsoft SQL Server version 7.0 or later. Uses the System.Data.SqlClientnamespace. 
.NET Framework Data Provider for OLE DB 
For data sources exposed using OLE DB. Uses the System.Data.OleDbnamespace. 
.NET Framework Data Provider for ODBC 
For data sources exposed using ODBC. Uses the System.Data.Odbcnamespace. 
.NET Framework Data ProviderforOracle 
ForOracle data sources. The.NET Framework Data ProviderforOracle supportsOracle clientsoftware version8.1.7 and later, and uses theSystem.Data.OracleClientnamespace.
ADO.Net 
•Data Providers-Objetos 
–Connection(Establece y libera conexiones a la BD) 
–Command(Ejecuta comandos como sentencias SQL, StoredProcedures, actualizaciones sobre la BD, etc.) 
–DataReader(Provee acceso directo, secuencial y de sólo lectura a los datos) 
–DataAdapter(Permite poblar DataSetsy realizar sincronización sobre la BD) 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•Data Providers–Objetos adicionales 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
Object 
Description 
Transaction 
Enables you to enlist commands in transactions at the data source. The base class for all Transactionobjects is the DbTransactionclass. 
CommandBuilder 
A helper object that will automatically generate command properties of a DataAdapteror will derive parameter information from a stored procedure and populate the Parameterscollection of a Commandobject. The base class for all CommandBuilderobjects is the DbCommandBuilderclass. 
ConnectionStringBuilder 
A helper object that provides a simple way to create and manage the contents of connection strings used by the Connectionobjects. The base class for all ConnectionStringBuilderobjects is the DbConnectionStringBuilderclass. 
Parameter 
Defines input, output, and return value parameters for commands and stored procedures. The base class for all Parameterobjects is the DbParameterclass. 
Exception 
Returned when an error is encountered at the data source. For an error encountered at the client, .NET Framework data providers throw a .NET Framework exception. The base class for all Exceptionobjects is the DbExceptionclass. 
Error 
Exposes the information from a warning or error returned by a data source. 
ClientPermission 
Provided for .NET Framework data provider code access security attributes. The base class for all ClientPermissionobjects is the DBDataPermissionclass.
ADO.Net 
•Data Providers–Escogiendo el apropiado 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
Provider 
Notes 
.NET Framework Data Provider for SQL Server 
Recommendedformiddle-tierapplicationsusingMicrosoft SQL Server 7.0 orlater. 
Recommendedforsingle-tierapplicationsusingMicrosoft DatabaseEngine(MSDE) orSQL Server 7.0 orlater. 
Recommendedoveruse of theOLE DB ProviderforSQL Server (SQLOLEDB) withthe.NET Framework Data ProviderforOLE DB. 
ForSQL Server 6.5 and earlier, youmustuse theOLE DB ProviderforSQL Server withthe.NET Framework Data ProviderforOLE DB. 
.NET Framework Data Provider for OLE DB 
Recommended for middle-tier applications using SQL Server 6.5 or earlier. 
For SQL Server 7.0 or later, the .NET Framework Data Provider for SQL Server is recommended. 
Also recommended for single-tier applications using Microsoft Access databases. Use of an Access database for a middle-tier application is not recommended. 
.NET Framework Data Provider for ODBC 
Recommended for middle and single-tier applications using ODBC data sources. 
.NET Framework Data ProviderforOracle 
Recommended for middle and single-tier applications using Oracle data sources.
ADO.Net 
•Data Providers 
–Objeto Connection 
•Provee la capacidad de conexión a cualquier fuente de datos. 
•Cada Providerproporciona su implementación: 
•La información necesaria para realizar la conexión se entrega mediante la propiedad ConnectionString. 
•Abre la conexión con la BD mediante el método Open(). 
•Cierra la conexión con la BD mediante el método Close(). 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•Data Providers 
–Objeto Command 
•Una vez establecida la conexión, se utiliza el objeto Command. 
•Puede ejecutar consultas de inserción, modificación, eliminación de datos, etc. 
•Puede invocar “StoredProcedures”. 
•Maneja el envío y recepción de parámetros. 
•Métodos: 
–ExecuteReader() : ejecuta una consulta que devuelve un conjunto de datos (DataReader) . 
–ExecuteScalar(): ejecuta una consulta que devuelve un simple valor escalar. 
–ExecuteXmlReader(): ejecuta una consulta que devuelve un conjunto de datos en formato XML (Sólo para SqlCommand). 
–ExecuteNonQuery() : ejecuta una actualización de datos o similar. 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•Data Providers 
–Objeto DataReader 
•Proporcionan acceso rápido a la data. 
•Sólo se mueven hacia adelante y es read-only. 
•Sólo pueden leer una fila a la vez. 
•Para leer una fila se utiliza el método Read(). 
•Para leer los valores de la fila se utilizan los métodos Get: GetString(n), GetInt32(n), etc. 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•Data Providers 
–Objeto DataAdapter 
•Es el puente entre las partes desconectadas y conectadas de ADO.Net 
•Utiliza los objetos Commandpara poblar los objetos desconectados (DataSet). 
•Utiliza los objetos Commandpara actualizar la BD en base a las modificaciones del DataSet. 
•El método Fill() puede llenar DataSetso DataTables. 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•El DataAdapter(panorama) 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•DataSet 
–Representación en memoria de datos de múltiples fuentes. 
–Es independiente de la fuente de datos. 
–Permite acceso y manejo más flexible de la data que el DataReader. 
–Pueden modificar la data a diferencia de los DataReaders(read-only). 
–Pueden guardar los cambios en la BD, mediante el DataAdapter. 
–Contiene múltiples objetos (DataTable, DataColumn, DataView, etc.) 
–Utilizan XML para su persistencia 
–Diseñado para escenarios desconectados. 
–Es la base sobre la cual se construyen los DataSetstipados. 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•DataSet 
–Modelo de objetos 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•Dataset(esquema) 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
DataSet 
.Tables[...] 
.Relations[...] 
... DataTable .Columns[..] .Rows[..] DataTable .Columns[...] .Rows[...] .DefaultView... DataRowDataRowdataDataColumnschemaDataColumn 
DataViewDataRelationDataRelation
ADO.Net 
• DataSet - DataAdapter 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva - MCTS.Net (eriveraa@gmail.com) 24 
ADO.NET Content Components 
XML fil e 
Dat aSet 
Tabl es 
Rel ati ons 
Dat aTabl e 
ReadXml 
Writ eXml 
Dat aTabl e 
Constr ai nt s 
Dat aCol umn 
Dat aRow 
Dat aRel ati on 
connectionless connection-oriented 
ADO.NET Managed 
Providers 
Database 
Update 
Fill 
Connectionless data flow Connection-oriented data flow 
DataAdapter
ADO.Net 
•LINQ (Net Framework 3.5) 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) varoverdrawnQuery= from account in db.Accountswhere account.Balance< 0select new { account.Name, account.Address};
ADO.Net 
•ClasesComunes(Revisión) 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva-MCTS.Net(eriveraa@gmail.com) 
Base de Datos 
XxxConnection 
XxxCommand 
DataSet 
XxxDataReader 
XxxDataAdapter 
Manejala conexióna unabase de 
datos 
Ejecuta comandos contra una base 
de datos 
Copialocal de datosrelacionales 
Proveeaccesoa datos 
Read-only, Forward-only 
Intercambiadatosentreun dataset 
y unabase de datos
ADO.Net 
Accesoa Datos–EscenarioConectado 
•En un escenarioconectado, losrecursosse mantienenen el servidorhastaquela conexiónse cierra. 
•Pasos: 
1.AbrirConexión 
2.EjecutarComando 
3.ProcesarFilasen DataReader 
4.CerrarReader 
5.CerrarConexión 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
Accesoa Datos–EscenarioDesconectado 
•En un escenariodesconectado, losrecursosno se mantienenen el servidormientraslosdatosse procesan. 
•Pasos: 
1.AbrirConexión 
2.LlenarDataSetmedianteDataAdapter 
3.CerrarConexión 
4.ProcesarDataSet 
5.AbrirConexión 
6.Actualizarfuentede datosmedianteDataAdapter 
7.CerrarConexión 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•Ejemplos de ADO.Net 
–Objeto Connection 
–Objeto Command 
•ExecuteReader() 
•ExecuteScalar() 
•ExecuteXmlReader() 
•ExecuteNonQuery() 
•Comandos Paramétricos 
–Objeto DataReader 
–Objeto DataAdapter 
–Objeto DataSet-DataAdapter 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
ADO.Net 
•Ejemplo del Objeto Connection 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
string connectionString= "Data Source=(local); Initial Catalog=Adventureworks; " + "Integrated Security=SSPI; Persist Security Info=False"; SqlConnectionconnection = new SqlConnection(connectionString); connection.Open(); using (connection) { // Use the database connection. } 
SqlConnectionCn= new SqlConnection("Data Source=localhost;IntegratedSecurity=SSPI;InitialCatalog=Adventureworks"); 
Cn.Open(); 
// Operaciones de Acceso a Datos 
Cn.Close(); 
stringconnectionString= ConfigurationManager.ConnectionStrings["AdventureWorks"].ConnectionString;
ADO.Net 
•Ejemplo de objeto Connectionutilizando ConnectionStringBuilder 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
usingSystem; 
usingSystem.Data.SqlClient; 
namespaceConnectionTest 
{ 
classProgram 
{ 
staticvoidMain(string[] args) 
{ 
SqlConnectionStringBuilderconnBuilder= new SqlConnectionStringBuilder(); 
connBuilder.InitialCatalog= "TestDB"; 
connBuilder.DataSource= @".SQLExpress"; 
connBuilder.IntegratedSecurity= true; 
SqlConnectionconn= new SqlConnection(connBuilder.ConnectionString); 
conn.Open(); 
Console.WriteLine("Connected to SQL Server v" + conn.ServerVersion); 
conn.Close(); 
Console.ReadLine(); 
} 
} 
}
ADO.Net 
•Ejemplo de ExecuteReader() 1/2 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) // Middle-tierclass, whichcontainsa businessmethodthatreturnsa data reader. publicclassMyProductsDAC{ publicstaticSqlDataReaderGetProductReader() { SqlConnectionconnection= new SqlConnection(aConnectionString); connection.Open(); stringsql= "SELECT Name, ListPriceFROM Production.Product"; SqlDataReaderreader; using(SqlCommandcommand= new SqlCommand(sql, connection)) { command.CommandType= CommandType.Text; reader= command.ExecuteReader(CommandBehavior.SingleResult| CommandBehavior.CloseConnection); } // Disposecommandobject. returnreader; } }
ADO.Net 
•Ejemplo de ExecuteReader() 2/2 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
// User-interface component, whichcallsthemiddle-tierbusinessmethod. publicclassMyUserInterfaceComponent{ publicvoidMyMethod() { using(SqlDataReaderreader= MyProductsDAC.GetProductReader()) { 
while(reader.Read()) { Console.WriteLine("Productname: {0}", reader.GetString(0)); Console.WriteLine("Productprice: {0}", reader.GetDecimal(1)); } 
} // Disposedata reader, whichalsoclosestheconnection. } }
ADO.Net 
•Ejemplos de ExecuteScalar() 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) SqlConnectionconnection= new SqlConnection(aConnectionString); SqlCommandcommand= new SqlCommand( "SELECT COUNT(*) FROM Production.Product", connection); command.CommandType= CommandType.Text; connection.Open(); intcount= (int)command.ExecuteScalar(); connection.Close(); using(SqlConnectionconnection= new SqlConnection(aConnectionString)) { connection.Open(); using(SqlCommandcommand= new SqlCommand( "SELECT AVG(ListPrice) FROM Production.Product", connection)) { command.CommandType= CommandType.Text; decimal count= (decimal) command.ExecuteScalar(); // Use queryresult. } // Disposecommandobject. } // Dispose(close) connectionobject.
ADO.Net 
•Ejemplo de ExecuteXmlReader() 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) using(SqlConnectionconnection= new SqlConnection(aConnectionString)) { connection.Open(); using( SqlCommandcommand= new SqlCommand("SELECT Name, ListPriceFROM Production.ProductFOR XML AUTO“,connection) ) { command.CommandType= CommandType.Text; XmlReaderreader= command.ExecuteXmlReader(); while(reader.Read()) { // ProcessXML node. } reader.Close(); } // Disposecommandobject. } // Dispose(close) connectionobject.
ADO.Net 
•Ejemplo de ExecuteNonQuery() 1/2 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) public static void ExecuteNonQueryExample(IDbConnectioncon) { // Create and configure a new command. IDbCommandcom= con.CreateCommand(); com.CommandType= CommandType.Text; com.CommandText= "UPDATE Employees SET Title = 'Sales Director' WHERE EmployeeId= '5'"; // Execute the command and process the result. intresult= com.ExecuteNonQuery(); // Checktheresultif(result== 1) { Console.WriteLine("Employeetitleupdated."); } else{ Console.WriteLine("Employee title not updated."); } }
ADO.Net 
•Ejemplo de ExecuteNonQuery() 2/2 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) using(SqlConnectionconnection= new SqlConnection(aConnectionString)) { connection.Open(); using(SqlCommandcommand= new SqlCommand("uspUpdatePrice", connection)) { command.CommandType= CommandType.StoredProcedure; command.Parameters.Add("@prmProductID", SqlDbType.Int).Value= aProductID; command.Parameters.Add("@prmAmount", SqlDbType.Money).Value= anAmount; introwsAffected= command.ExecuteNonQuery(); if(rowsAffected== 1) Console.WriteLine("Theproducthas beenupdatedsuccessfully."); elseConsole.WriteLine("Theproducthas notbeenupdated."); } // Disposecommandobject. } // Dispose(close) connectionobject.
ADO.Net 
•Ejemplo de ExecuteNonQuery() 2/2 –StoredProcedure. 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) CREATE PROCEDURE dbo.uspUpdatePrice( @prmProductIDint, @prmAmountmoney) ASBEGINUPDATE Production.ProductSET ListPrice= ListPrice+ @prmAmountWHERE ProductID=@prmProductIDEND
ADO.Net 
•Ejemplo de Comandos Paramétricos1/2 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
stringsql= "SELECT Name, ListPriceFROM Production.ProductWHERE NameLIKE @NamePart"; using(SqlConnectionconnection= new SqlConnection(aConnectionString)) { connection.Open(); using(SqlCommandcommand= new SqlCommand(sql, connection)) { command.CommandType= CommandType.Text; command.Parameters.Add("@NamePart", SqlDbType.NVarChar, 50).Value= aName; using(SqlDataReaderreader= command.ExecuteReader()) { while(reader.Read()) { Console.WriteLine("Productname: {0}", reader.GetString(0)); Console.WriteLine("Productprice: {0}", reader.GetDecimal(1)); } } // Disposedata reader. } // Disposecommandobject. } // Dispose(close) connectionobject.
ADO.Net 
•Ejemplo de Comandos Paramétricos2/2 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) using(SqlConnectionconnection= new SqlConnection(aConnectionString)) { connection.Open(); using(SqlCommandcommand= new SqlCommand("uspGetProductsAbovePrice“,connection)) { command.CommandType= CommandType.StoredProcedure; command.Parameters.Add("@prmPrice", SqlDbType.Money).Value= aPrice; command.Parameters.Add("@prmAverage", SqlDbType.Money).Direction= ParameterDirection.Output; command.Parameters.Add("@RETURN_VALUE", SqlDbType.Int).Direction= ParameterDirection.ReturnValue; using(SqlDataReaderreader= command.ExecuteReader()) { while(reader.Read()) { Console.WriteLine("Productname: {0}", reader.GetString(0)); Console.WriteLine("Productprice: {0}", reader.GetDecimal(1)); } } // Dispose(close) data readerobject. decimal average= (decimal) command.Parameters["@prmAverage"].Value; Console.WriteLine("Averagepriceabovethreshold: {0}", average); intcount= (int) command.Parameters["@RETURN_VALUE"].Value; Console.WriteLine("Numberof productsabovethreshold: {0}", count); } // Disposecommandobject. } // Dispose(close) connectionobject.
ADO.Net 
•Ejemplo de Comandos Paramétricos2/2 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) 
CREATE PROCEDURE dbo.uspGetProductsAbovePrice( @prmPricedecimal, @prmAveragedecimal OUTPUT) ASBEGINDECLARE @varCountintSELECT@prmAverage=AVG(ListPrice), @varCount=COUNT(*) FROMProduction.ProductWHEREListPrice> @prmPriceSELECTName, ListPriceFROMProduction.ProductWHEREListPrice> @prmPriceRETURN @varCountEND
ADO.Net 
•Ejemplo de DataReader1/4 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) usingSystem.Data.SqlClient; classDataReaderExample{ publicstaticvoidMain() { SqlConnectionCn= new SqlConnection( "Data Source=localhost; IntegratedSecurity=SSPI; InitialCatalog=example"); SqlCommandCmd= Cn.CreateCommand(); Cmd.CommandText= "SELECT Name, AgeFROM Employees"; Cn.Open(); SqlDataReaderRdr= Cmd.ExecuteReader(); while(Rdr.Read()) { System.Console.WriteLine( "Name: {0}, Age: {1}“, Rdr.GetString(0), Rdr.GetInt32(1)); } Rdr.Close(); Cn.Close(); } }
ADO.Net 
•Ejemplo de DataReader2/4 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) classProgram{ staticvoidMain(string[] args) { SqlConnectionStringBuilderscb= new SqlConnectionStringBuilder(); scb.DataSource= @".SQLExpress"; scb.InitialCatalog= "TestDB"; scb.IntegratedSecurity= true; SqlConnectionconn= new SqlConnection(scb.ConnectionString); conn.Open(); SqlCommandcmd= conn.CreateCommand(); cmd.CommandText= "SELECT * FromUsers"; SqlDataReaderrdr= cmd.ExecuteReader(); while(rdr.Read()) { Console.WriteLine(string.Format("User{0}, Full Name{1} {2}", rdr.GetString(rdr.GetOrdinal("UserName")), (string)rdr["FirstName"], rdr.GetString(rdr.GetOrdinal("LastName")))); } rdr.Close(); conn.Close(); Console.ReadLine(); } }
ADO.Net 
•Ejemplo de DataReader3/4 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) classProgram{ staticvoidMain() { stringconnectionString= "Data Source=(local);InitialCatalog=Northwind; IntegratedSecurity=SSPI"; stringqueryString= "SELECT CategoryID, CategoryNameFROM dbo.Categories;"; using(SqlConnectionconnection= new SqlConnection(connectionString)) { SqlCommandcommand= connection.CreateCommand(); command.CommandText= queryString; try{ connection.Open(); SqlDataReaderreader= command.ExecuteReader(); while(reader.Read()) { Console.WriteLine("t{0}t{1}“, reader[0], reader[1]); } reader.Close(); } catch (Exceptionex) { Console.WriteLine(ex.Message); } } } }
ADO.Net 
•Ejemplo de DataReader4/4 
Desarrollo de aplicaciones .NET 
Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) staticvoidHasRows(SqlConnectionconnection) { using(connection) { SqlCommandcommand= new SqlCommand("SELECT CategoryID, CategoryNameFROM Categories;“, connection); connection.Open(); SqlDataReaderreader= command.ExecuteReader(); if(reader.HasRows) { while(reader.Read()) { Console.WriteLine("{0}t{1}", reader.GetInt32(0), reader.GetString(1)); } } else{ Console.WriteLine("No rowsfound."); } reader.Close(); } }
ADO.Net 
•Ejemplo de DataAdapter/DataSet: Llenado de un DataSetcon una Tabla 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) privatevoidFillUserTable() { DataSetmyData= new DataSet(); string connectionString= "Data Source=(local);Initial Catalog=Test;IntegratedSecurity=SSPI;"; using (SqlConnectiontestConnection= new SqlConnection(connectionString)) { SqlCommandtestCommand= testConnection.CreateCommand(); testCommand.CommandText= "Select* fromuserTable"; SqlDataAdapterdataAdapter= new SqlDataAdapter(testCommand); dataAdapter.Fill(myData, "UserTable"); } // testConnection.Disposecalledautomatically. }
ADO.Net 
•Ejemplo de DataAdapter/DataSet: Llenado de un DataSetde 2 Tablas 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) privatevoidbuttonFillData_Click(objectsender, EventArgse) { stringconnectionString= "Data Source=(local);Initial Catalog=Test;IntegratedSecurity=SSPI;"; DataSetuserData= new DataSet(); using (SqlConnectiontestConnection= new SqlConnection(connectionString)) { SqlCommandtestCommand= testConnection.CreateCommand(); testCommand.CommandText= "Select FirstName, LastNamefrom userTable;" + " SelectPermissionTypefromPermissionsTable"; SqlDataAdapterdataAdapter= new SqlDataAdapter(testCommand); dataAdapter.Fill(userData); } // testConnection.Disposecalledautomatically. }
ADO.Net 
•Ejemplo de DataAdapter/DataSet: Llenado de un DataSetde 2 Tablas mediante un StoredProcedure 
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Create Procedure GetMultipleResultsAsBeginSelect FirstName, LastNamefrom userTable; Select PermissionTypefrom PermissionsTable; End
Que veremos la próxima sesión? 
•Windows Formsy Aplicaciones 
Desarrollo de aplicaciones .NETEduardo Rivera Alva-MCTS.Net(eriveraa@gmail.com)
Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Fin de la sesión 
•Dudas, comentarios, sugerencias? 
•Comunicarse por email a eriveraa@gmail.com 
•Gracias por su atención !!

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

ADO
ADOADO
ADO
 
ADO.NET
ADO.NETADO.NET
ADO.NET
 
Diapositivas de ado.net
Diapositivas de ado.netDiapositivas de ado.net
Diapositivas de ado.net
 
Ado net
Ado netAdo net
Ado net
 
Ado.net 2012
Ado.net 2012Ado.net 2012
Ado.net 2012
 
Acceso A Datos Y Ado.Net
Acceso A Datos Y Ado.NetAcceso A Datos Y Ado.Net
Acceso A Datos Y Ado.Net
 
Diapositivas de acceso a datos ado.net
Diapositivas de acceso a datos ado.netDiapositivas de acceso a datos ado.net
Diapositivas de acceso a datos ado.net
 
tecnología de conectividad de datos
tecnología de conectividad de datostecnología de conectividad de datos
tecnología de conectividad de datos
 
TUTORIAL DE ADO.NET MUY BUENO
TUTORIAL DE ADO.NET MUY BUENOTUTORIAL DE ADO.NET MUY BUENO
TUTORIAL DE ADO.NET MUY BUENO
 
ADO.NET
ADO.NETADO.NET
ADO.NET
 
Ochoa ornelas raquel_acceso a una base de datos
Ochoa ornelas raquel_acceso a una base de datosOchoa ornelas raquel_acceso a una base de datos
Ochoa ornelas raquel_acceso a una base de datos
 
Ado.net
Ado.netAdo.net
Ado.net
 
12-Unidad 2: Aplicaciones Windows Forms-2.3 Ado-net
12-Unidad 2: Aplicaciones Windows Forms-2.3 Ado-net12-Unidad 2: Aplicaciones Windows Forms-2.3 Ado-net
12-Unidad 2: Aplicaciones Windows Forms-2.3 Ado-net
 
11-Unidad 2: Aplicaciones Windows Forms-2.3 Ado-net
11-Unidad 2: Aplicaciones Windows Forms-2.3 Ado-net11-Unidad 2: Aplicaciones Windows Forms-2.3 Ado-net
11-Unidad 2: Aplicaciones Windows Forms-2.3 Ado-net
 
ADO.NET
ADO.NETADO.NET
ADO.NET
 
Visual 2010 sql server 2008
Visual 2010 sql server 2008Visual 2010 sql server 2008
Visual 2010 sql server 2008
 
11- Unidad 2: Aplicaciones Windows Forms- 2.3 Acceso a datos Adonet
11- Unidad 2: Aplicaciones Windows Forms- 2.3 Acceso a datos Adonet11- Unidad 2: Aplicaciones Windows Forms- 2.3 Acceso a datos Adonet
11- Unidad 2: Aplicaciones Windows Forms- 2.3 Acceso a datos Adonet
 
Modoconexion
ModoconexionModoconexion
Modoconexion
 
Presentacion en slide share
Presentacion en  slide sharePresentacion en  slide share
Presentacion en slide share
 
Arquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NETArquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NET
 

Similar a Ado.net

Sistema Ado.Net
Sistema Ado.NetSistema Ado.Net
Sistema Ado.NetPersonal
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETJavier Roig
 
visual basic .net
visual basic .netvisual basic .net
visual basic .netvhaguilar
 
ADO NET Entity FrameWork
ADO NET Entity FrameWorkADO NET Entity FrameWork
ADO NET Entity FrameWorkmascodigo
 
Lps 18 basesdedatos
Lps 18 basesdedatosLps 18 basesdedatos
Lps 18 basesdedatosdevsco63
 
Lps 18 basesdedatos
Lps 18 basesdedatosLps 18 basesdedatos
Lps 18 basesdedatosRobert Wolf
 
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...Franklin Parrales Bravo
 
20131018101042
2013101810104220131018101042
20131018101042beth116
 
PROVEEDORES DATOS.NET framework.pptx
PROVEEDORES DATOS.NET framework.pptxPROVEEDORES DATOS.NET framework.pptx
PROVEEDORES DATOS.NET framework.pptxjuan gonzalez
 
Introducción a la plataforma sql azure
Introducción a la plataforma sql azureIntroducción a la plataforma sql azure
Introducción a la plataforma sql azureJoseph Lopez
 
Acceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basicAcceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basicgerardd98
 
Acceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basicAcceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basicAlfredo Joya
 
Proveedores nativos
Proveedores nativosProveedores nativos
Proveedores nativosJosue Perez
 

Similar a Ado.net (20)

Sistema Ado.Net
Sistema Ado.NetSistema Ado.Net
Sistema Ado.Net
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NET
 
visual basic .net
visual basic .netvisual basic .net
visual basic .net
 
ADO NET Entity FrameWork
ADO NET Entity FrameWorkADO NET Entity FrameWork
ADO NET Entity FrameWork
 
Clase ix
Clase ixClase ix
Clase ix
 
Ado.net
Ado.netAdo.net
Ado.net
 
Lps 18 basesdedatos
Lps 18 basesdedatosLps 18 basesdedatos
Lps 18 basesdedatos
 
Lps 18 basesdedatos
Lps 18 basesdedatosLps 18 basesdedatos
Lps 18 basesdedatos
 
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
 
Clase xiii
Clase xiiiClase xiii
Clase xiii
 
20131018101042
2013101810104220131018101042
20131018101042
 
Jdbc
JdbcJdbc
Jdbc
 
PROVEEDORES DATOS.NET framework.pptx
PROVEEDORES DATOS.NET framework.pptxPROVEEDORES DATOS.NET framework.pptx
PROVEEDORES DATOS.NET framework.pptx
 
Introducción a la plataforma sql azure
Introducción a la plataforma sql azureIntroducción a la plataforma sql azure
Introducción a la plataforma sql azure
 
Acceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basicAcceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basic
 
Acceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basicAcceso a datos con ado.net en visual basic
Acceso a datos con ado.net en visual basic
 
Programación manuel crisostomo l
Programación manuel crisostomo lProgramación manuel crisostomo l
Programación manuel crisostomo l
 
Modo conexion
Modo conexionModo conexion
Modo conexion
 
Proveedores nativos
Proveedores nativosProveedores nativos
Proveedores nativos
 
Ado.net
Ado.netAdo.net
Ado.net
 

Último

GRUPO 5 Software en el campo de la salud.pptx
GRUPO 5 Software en el campo de la salud.pptxGRUPO 5 Software en el campo de la salud.pptx
GRUPO 5 Software en el campo de la salud.pptxNicolas Villarroel
 
Practica guiada Menu_ tecnología (Tic's)
Practica guiada Menu_ tecnología (Tic's)Practica guiada Menu_ tecnología (Tic's)
Practica guiada Menu_ tecnología (Tic's)BrianaFrancisco
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfOscarBlas6
 
FLUIDEZ-Teatro-Leido-4to-Grado-El-leon-y-el-raton- (1).pdf
FLUIDEZ-Teatro-Leido-4to-Grado-El-leon-y-el-raton- (1).pdfFLUIDEZ-Teatro-Leido-4to-Grado-El-leon-y-el-raton- (1).pdf
FLUIDEZ-Teatro-Leido-4to-Grado-El-leon-y-el-raton- (1).pdfYuriFuentesMartinez2
 
CamposGarcia_MariaMagdalena_M1S3AI6.pptx
CamposGarcia_MariaMagdalena_M1S3AI6.pptxCamposGarcia_MariaMagdalena_M1S3AI6.pptx
CamposGarcia_MariaMagdalena_M1S3AI6.pptx241518192
 
Fisica General.pdf ESCUELA D QUIMICA E INGENIERIA
Fisica General.pdf ESCUELA D QUIMICA E INGENIERIAFisica General.pdf ESCUELA D QUIMICA E INGENIERIA
Fisica General.pdf ESCUELA D QUIMICA E INGENIERIAcoloncopias5
 
Tema 1 - Fundamentos de gestión contable.pptx
Tema 1 - Fundamentos de gestión contable.pptxTema 1 - Fundamentos de gestión contable.pptx
Tema 1 - Fundamentos de gestión contable.pptxchinojosa17
 
El uso de las tic en la vida continúa , ambiente positivo y negativo.
El uso de las tic  en la vida continúa , ambiente positivo y negativo.El uso de las tic  en la vida continúa , ambiente positivo y negativo.
El uso de las tic en la vida continúa , ambiente positivo y negativo.ayalayenifer617
 
Producto académico 03 - Habilidades Comunicativas.pptx
Producto académico 03 - Habilidades Comunicativas.pptxProducto académico 03 - Habilidades Comunicativas.pptx
Producto académico 03 - Habilidades Comunicativas.pptx46828205
 
que es Planimetría definición importancia en topografia.pptx
que es Planimetría definición importancia en topografia.pptxque es Planimetría definición importancia en topografia.pptx
que es Planimetría definición importancia en topografia.pptxmrzreyes12
 
2º SOY LECTOR PART 2- MD EDUCATIVO (6).pdf
2º SOY LECTOR PART 2- MD  EDUCATIVO (6).pdf2º SOY LECTOR PART 2- MD  EDUCATIVO (6).pdf
2º SOY LECTOR PART 2- MD EDUCATIVO (6).pdfFernandaHernandez312615
 
ChatGPT Inteligencia artificial, funciones, limitaciones y ventajas.
ChatGPT Inteligencia artificial, funciones, limitaciones y ventajas.ChatGPT Inteligencia artificial, funciones, limitaciones y ventajas.
ChatGPT Inteligencia artificial, funciones, limitaciones y ventajas.Aldo Fernandez
 
libro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdflibro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdfFAUSTODANILOCRUZCAST
 
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptx
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptxrodriguez_DelAngel_MariaGPE_M1S3AL6.pptx
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptxssuser61dda7
 
GRUPO 10 SOFTWARE DE EL CAMPO DE LA SAULD
GRUPO 10 SOFTWARE DE EL CAMPO DE LA SAULDGRUPO 10 SOFTWARE DE EL CAMPO DE LA SAULD
GRUPO 10 SOFTWARE DE EL CAMPO DE LA SAULDLeslie Villar
 
actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx
actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsxactividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx
actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx241532171
 

Último (16)

GRUPO 5 Software en el campo de la salud.pptx
GRUPO 5 Software en el campo de la salud.pptxGRUPO 5 Software en el campo de la salud.pptx
GRUPO 5 Software en el campo de la salud.pptx
 
Practica guiada Menu_ tecnología (Tic's)
Practica guiada Menu_ tecnología (Tic's)Practica guiada Menu_ tecnología (Tic's)
Practica guiada Menu_ tecnología (Tic's)
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdf
 
FLUIDEZ-Teatro-Leido-4to-Grado-El-leon-y-el-raton- (1).pdf
FLUIDEZ-Teatro-Leido-4to-Grado-El-leon-y-el-raton- (1).pdfFLUIDEZ-Teatro-Leido-4to-Grado-El-leon-y-el-raton- (1).pdf
FLUIDEZ-Teatro-Leido-4to-Grado-El-leon-y-el-raton- (1).pdf
 
CamposGarcia_MariaMagdalena_M1S3AI6.pptx
CamposGarcia_MariaMagdalena_M1S3AI6.pptxCamposGarcia_MariaMagdalena_M1S3AI6.pptx
CamposGarcia_MariaMagdalena_M1S3AI6.pptx
 
Fisica General.pdf ESCUELA D QUIMICA E INGENIERIA
Fisica General.pdf ESCUELA D QUIMICA E INGENIERIAFisica General.pdf ESCUELA D QUIMICA E INGENIERIA
Fisica General.pdf ESCUELA D QUIMICA E INGENIERIA
 
Tema 1 - Fundamentos de gestión contable.pptx
Tema 1 - Fundamentos de gestión contable.pptxTema 1 - Fundamentos de gestión contable.pptx
Tema 1 - Fundamentos de gestión contable.pptx
 
El uso de las tic en la vida continúa , ambiente positivo y negativo.
El uso de las tic  en la vida continúa , ambiente positivo y negativo.El uso de las tic  en la vida continúa , ambiente positivo y negativo.
El uso de las tic en la vida continúa , ambiente positivo y negativo.
 
Producto académico 03 - Habilidades Comunicativas.pptx
Producto académico 03 - Habilidades Comunicativas.pptxProducto académico 03 - Habilidades Comunicativas.pptx
Producto académico 03 - Habilidades Comunicativas.pptx
 
que es Planimetría definición importancia en topografia.pptx
que es Planimetría definición importancia en topografia.pptxque es Planimetría definición importancia en topografia.pptx
que es Planimetría definición importancia en topografia.pptx
 
2º SOY LECTOR PART 2- MD EDUCATIVO (6).pdf
2º SOY LECTOR PART 2- MD  EDUCATIVO (6).pdf2º SOY LECTOR PART 2- MD  EDUCATIVO (6).pdf
2º SOY LECTOR PART 2- MD EDUCATIVO (6).pdf
 
ChatGPT Inteligencia artificial, funciones, limitaciones y ventajas.
ChatGPT Inteligencia artificial, funciones, limitaciones y ventajas.ChatGPT Inteligencia artificial, funciones, limitaciones y ventajas.
ChatGPT Inteligencia artificial, funciones, limitaciones y ventajas.
 
libro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdflibro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdf
 
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptx
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptxrodriguez_DelAngel_MariaGPE_M1S3AL6.pptx
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptx
 
GRUPO 10 SOFTWARE DE EL CAMPO DE LA SAULD
GRUPO 10 SOFTWARE DE EL CAMPO DE LA SAULDGRUPO 10 SOFTWARE DE EL CAMPO DE LA SAULD
GRUPO 10 SOFTWARE DE EL CAMPO DE LA SAULD
 
actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx
actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsxactividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx
actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx
 

Ado.net

  • 1. Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Desarrollo de Aplicaciones Capítulo 05 ADO.Net
  • 2. Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Agenda •Repaso sesión anterior. •ADO.Net –Introducción –Arquitectura –Data Providers •Connection •Command •DataReader •DataAdapter –DataSet –LINQ –Clases Comunes –Escenario Conectado –Escenario Desconectado –Ejemplos •Que veremos la próxima sesión?
  • 3. Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Repaso sesión anterior •Arrays –Uni-dimensionales, Multidimensionales –Estructura interna –Arraystipo valor y tipo referencia –Iteración •Colecciones –ArrayList •Ver diapositivas previas.
  • 4. ADO.Net Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Referencias 1.Understanding .NET. Caps. 6 (AccesingData: ADO.Net) 2.NET Framework Developer’s Guide: ADO.NET (http://msdn2.microsoft.com/en- us/library/e80y5yhx(VS.80).aspx) 3.ApressPro ADO.NET.2.0.
  • 5. ADO.Net •Idea de acceso a datos universal –Comunicación entre los lenguajes de programación y las bases de datos o fuentes de datos. –Modelo de programación uniforme mediante una API estándar. –Implementaciones especializadas para las fuentes de datos (providers). Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 6. ADO.Net •Qué propone NET Framework? Desarrollo de aplicaciones .NET Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 7. ADO.Net •ADO.NET Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) SQL-dataMS SQL Server, Oracle, Jet, Foxpro, ... SQL ServerOracleMySQL ODBCNon-SQL-dataDirectory Services, Mail, Text, Video, ... OLEDBADO.NET
  • 8. ADO.Net •Qué es ADO.Net? –Es parte fundamental de NET Framework. –Es un modelo de objetos desarrollado por Microsoft. –Provee servicios de acceso a datos para múltiples fuentes de datos. •Bases de datos relacionales (RDBMS) •XML •Archivos Excel, Access, etc… –Provee componentes para crear aplicaciones web y distribuidas sobre diversas fuentes de datos. –Se accede mediante el namespaceSystem.Data. –Provee escenarios conectados y desconectados. –Es la evolución de Microsoft ADO (ActivexData Objects). –Provee una serie de interfaces y clases abstractas para implementaciones de terceros. (API Independendiente) Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 9. ADO.Net •ADO.Net2.0 es una API Independiente Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Interfaces IDb* (ej: IDbConnection) clasesbase abstractasDb* (ej: DbConnection) Implementa la clase baseDb* Sql OleDbODBCOracle3rdParty 13rdParty 2Provider- Independiente del código de la aplicación en esta capa Provider- específico en el código de la aplicación en esta capa
  • 10. ADO.Net •Arquitectura de ADO.NET (2 Componentes fundamentales) Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) –El DataSet •Son representaciones “en memoria” de los datos. •Independiente de la fuente de datos. •Puede utilizar múltiples fuentes de datos. •Proporciona un conjunto de objetos (DataTables, DataRow, etc.) •Utilizan XML para su persistencia. •Diseñado para escenarios “desconectados” –Los NET Framework Data Providers •Son un conjunto de objetos (Connection, Command, DataReader, DataAdapter). •Permiten la conexión a la fuente de datos. •Permiten obtener, modificar y datos. •Pueden ejecutar “StoredProcedures” y enviar/recibir parámetros
  • 11. ADO.Net •Data Providers –Cualquier aplicación que utiliza ADO.Netaccede a la fuente de datos mediante un Provider. –Están programados en código manejado, pero pueden haber excepciones. –Permiten conectar a la BD, ejecutar comandos y obtener resultados –Está disponibles mediante sus respectivos Namespaces. •System.Data.SqlClient •System.Data.OracleClient •System.Data.OleDb –Cada Providerimplementa interfaces para sus objetos. –Se pueden implementar Providerspor terceros (MySQL, PostgreSQL, DB2, etc.) Desarrollo de aplicaciones .NETEduardo Rivera Alva-MCTS.Net(eriveraa@gmail.com)
  • 12. ADO.Net •Data Providers-Implementaciones Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) .NET Framework data provider Description .NET Framework Data Provider for SQL Server Provides data access for Microsoft SQL Server version 7.0 or later. Uses the System.Data.SqlClientnamespace. .NET Framework Data Provider for OLE DB For data sources exposed using OLE DB. Uses the System.Data.OleDbnamespace. .NET Framework Data Provider for ODBC For data sources exposed using ODBC. Uses the System.Data.Odbcnamespace. .NET Framework Data ProviderforOracle ForOracle data sources. The.NET Framework Data ProviderforOracle supportsOracle clientsoftware version8.1.7 and later, and uses theSystem.Data.OracleClientnamespace.
  • 13. ADO.Net •Data Providers-Objetos –Connection(Establece y libera conexiones a la BD) –Command(Ejecuta comandos como sentencias SQL, StoredProcedures, actualizaciones sobre la BD, etc.) –DataReader(Provee acceso directo, secuencial y de sólo lectura a los datos) –DataAdapter(Permite poblar DataSetsy realizar sincronización sobre la BD) Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 14. ADO.Net •Data Providers–Objetos adicionales Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Object Description Transaction Enables you to enlist commands in transactions at the data source. The base class for all Transactionobjects is the DbTransactionclass. CommandBuilder A helper object that will automatically generate command properties of a DataAdapteror will derive parameter information from a stored procedure and populate the Parameterscollection of a Commandobject. The base class for all CommandBuilderobjects is the DbCommandBuilderclass. ConnectionStringBuilder A helper object that provides a simple way to create and manage the contents of connection strings used by the Connectionobjects. The base class for all ConnectionStringBuilderobjects is the DbConnectionStringBuilderclass. Parameter Defines input, output, and return value parameters for commands and stored procedures. The base class for all Parameterobjects is the DbParameterclass. Exception Returned when an error is encountered at the data source. For an error encountered at the client, .NET Framework data providers throw a .NET Framework exception. The base class for all Exceptionobjects is the DbExceptionclass. Error Exposes the information from a warning or error returned by a data source. ClientPermission Provided for .NET Framework data provider code access security attributes. The base class for all ClientPermissionobjects is the DBDataPermissionclass.
  • 15. ADO.Net •Data Providers–Escogiendo el apropiado Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Provider Notes .NET Framework Data Provider for SQL Server Recommendedformiddle-tierapplicationsusingMicrosoft SQL Server 7.0 orlater. Recommendedforsingle-tierapplicationsusingMicrosoft DatabaseEngine(MSDE) orSQL Server 7.0 orlater. Recommendedoveruse of theOLE DB ProviderforSQL Server (SQLOLEDB) withthe.NET Framework Data ProviderforOLE DB. ForSQL Server 6.5 and earlier, youmustuse theOLE DB ProviderforSQL Server withthe.NET Framework Data ProviderforOLE DB. .NET Framework Data Provider for OLE DB Recommended for middle-tier applications using SQL Server 6.5 or earlier. For SQL Server 7.0 or later, the .NET Framework Data Provider for SQL Server is recommended. Also recommended for single-tier applications using Microsoft Access databases. Use of an Access database for a middle-tier application is not recommended. .NET Framework Data Provider for ODBC Recommended for middle and single-tier applications using ODBC data sources. .NET Framework Data ProviderforOracle Recommended for middle and single-tier applications using Oracle data sources.
  • 16. ADO.Net •Data Providers –Objeto Connection •Provee la capacidad de conexión a cualquier fuente de datos. •Cada Providerproporciona su implementación: •La información necesaria para realizar la conexión se entrega mediante la propiedad ConnectionString. •Abre la conexión con la BD mediante el método Open(). •Cierra la conexión con la BD mediante el método Close(). Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 17. ADO.Net •Data Providers –Objeto Command •Una vez establecida la conexión, se utiliza el objeto Command. •Puede ejecutar consultas de inserción, modificación, eliminación de datos, etc. •Puede invocar “StoredProcedures”. •Maneja el envío y recepción de parámetros. •Métodos: –ExecuteReader() : ejecuta una consulta que devuelve un conjunto de datos (DataReader) . –ExecuteScalar(): ejecuta una consulta que devuelve un simple valor escalar. –ExecuteXmlReader(): ejecuta una consulta que devuelve un conjunto de datos en formato XML (Sólo para SqlCommand). –ExecuteNonQuery() : ejecuta una actualización de datos o similar. Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 18. ADO.Net •Data Providers –Objeto DataReader •Proporcionan acceso rápido a la data. •Sólo se mueven hacia adelante y es read-only. •Sólo pueden leer una fila a la vez. •Para leer una fila se utiliza el método Read(). •Para leer los valores de la fila se utilizan los métodos Get: GetString(n), GetInt32(n), etc. Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 19. ADO.Net •Data Providers –Objeto DataAdapter •Es el puente entre las partes desconectadas y conectadas de ADO.Net •Utiliza los objetos Commandpara poblar los objetos desconectados (DataSet). •Utiliza los objetos Commandpara actualizar la BD en base a las modificaciones del DataSet. •El método Fill() puede llenar DataSetso DataTables. Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 20. ADO.Net •El DataAdapter(panorama) Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 21. ADO.Net •DataSet –Representación en memoria de datos de múltiples fuentes. –Es independiente de la fuente de datos. –Permite acceso y manejo más flexible de la data que el DataReader. –Pueden modificar la data a diferencia de los DataReaders(read-only). –Pueden guardar los cambios en la BD, mediante el DataAdapter. –Contiene múltiples objetos (DataTable, DataColumn, DataView, etc.) –Utilizan XML para su persistencia –Diseñado para escenarios desconectados. –Es la base sobre la cual se construyen los DataSetstipados. Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 22. ADO.Net •DataSet –Modelo de objetos Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 23. ADO.Net •Dataset(esquema) Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) DataSet .Tables[...] .Relations[...] ... DataTable .Columns[..] .Rows[..] DataTable .Columns[...] .Rows[...] .DefaultView... DataRowDataRowdataDataColumnschemaDataColumn DataViewDataRelationDataRelation
  • 24. ADO.Net • DataSet - DataAdapter Desarrollo de aplicaciones .NET Eduardo Rivera Alva - MCTS.Net (eriveraa@gmail.com) 24 ADO.NET Content Components XML fil e Dat aSet Tabl es Rel ati ons Dat aTabl e ReadXml Writ eXml Dat aTabl e Constr ai nt s Dat aCol umn Dat aRow Dat aRel ati on connectionless connection-oriented ADO.NET Managed Providers Database Update Fill Connectionless data flow Connection-oriented data flow DataAdapter
  • 25. ADO.Net •LINQ (Net Framework 3.5) Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) varoverdrawnQuery= from account in db.Accountswhere account.Balance< 0select new { account.Name, account.Address};
  • 26. ADO.Net •ClasesComunes(Revisión) Desarrollo de aplicaciones .NET Eduardo Rivera Alva-MCTS.Net(eriveraa@gmail.com) Base de Datos XxxConnection XxxCommand DataSet XxxDataReader XxxDataAdapter Manejala conexióna unabase de datos Ejecuta comandos contra una base de datos Copialocal de datosrelacionales Proveeaccesoa datos Read-only, Forward-only Intercambiadatosentreun dataset y unabase de datos
  • 27. ADO.Net Accesoa Datos–EscenarioConectado •En un escenarioconectado, losrecursosse mantienenen el servidorhastaquela conexiónse cierra. •Pasos: 1.AbrirConexión 2.EjecutarComando 3.ProcesarFilasen DataReader 4.CerrarReader 5.CerrarConexión Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 28. ADO.Net Accesoa Datos–EscenarioDesconectado •En un escenariodesconectado, losrecursosno se mantienenen el servidormientraslosdatosse procesan. •Pasos: 1.AbrirConexión 2.LlenarDataSetmedianteDataAdapter 3.CerrarConexión 4.ProcesarDataSet 5.AbrirConexión 6.Actualizarfuentede datosmedianteDataAdapter 7.CerrarConexión Desarrollo de aplicaciones .NET Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 29. ADO.Net •Ejemplos de ADO.Net –Objeto Connection –Objeto Command •ExecuteReader() •ExecuteScalar() •ExecuteXmlReader() •ExecuteNonQuery() •Comandos Paramétricos –Objeto DataReader –Objeto DataAdapter –Objeto DataSet-DataAdapter Desarrollo de aplicaciones .NET Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com)
  • 30. ADO.Net •Ejemplo del Objeto Connection Desarrollo de aplicaciones .NET Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) string connectionString= "Data Source=(local); Initial Catalog=Adventureworks; " + "Integrated Security=SSPI; Persist Security Info=False"; SqlConnectionconnection = new SqlConnection(connectionString); connection.Open(); using (connection) { // Use the database connection. } SqlConnectionCn= new SqlConnection("Data Source=localhost;IntegratedSecurity=SSPI;InitialCatalog=Adventureworks"); Cn.Open(); // Operaciones de Acceso a Datos Cn.Close(); stringconnectionString= ConfigurationManager.ConnectionStrings["AdventureWorks"].ConnectionString;
  • 31. ADO.Net •Ejemplo de objeto Connectionutilizando ConnectionStringBuilder Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) usingSystem; usingSystem.Data.SqlClient; namespaceConnectionTest { classProgram { staticvoidMain(string[] args) { SqlConnectionStringBuilderconnBuilder= new SqlConnectionStringBuilder(); connBuilder.InitialCatalog= "TestDB"; connBuilder.DataSource= @".SQLExpress"; connBuilder.IntegratedSecurity= true; SqlConnectionconn= new SqlConnection(connBuilder.ConnectionString); conn.Open(); Console.WriteLine("Connected to SQL Server v" + conn.ServerVersion); conn.Close(); Console.ReadLine(); } } }
  • 32. ADO.Net •Ejemplo de ExecuteReader() 1/2 Desarrollo de aplicaciones .NET Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) // Middle-tierclass, whichcontainsa businessmethodthatreturnsa data reader. publicclassMyProductsDAC{ publicstaticSqlDataReaderGetProductReader() { SqlConnectionconnection= new SqlConnection(aConnectionString); connection.Open(); stringsql= "SELECT Name, ListPriceFROM Production.Product"; SqlDataReaderreader; using(SqlCommandcommand= new SqlCommand(sql, connection)) { command.CommandType= CommandType.Text; reader= command.ExecuteReader(CommandBehavior.SingleResult| CommandBehavior.CloseConnection); } // Disposecommandobject. returnreader; } }
  • 33. ADO.Net •Ejemplo de ExecuteReader() 2/2 Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) // User-interface component, whichcallsthemiddle-tierbusinessmethod. publicclassMyUserInterfaceComponent{ publicvoidMyMethod() { using(SqlDataReaderreader= MyProductsDAC.GetProductReader()) { while(reader.Read()) { Console.WriteLine("Productname: {0}", reader.GetString(0)); Console.WriteLine("Productprice: {0}", reader.GetDecimal(1)); } } // Disposedata reader, whichalsoclosestheconnection. } }
  • 34. ADO.Net •Ejemplos de ExecuteScalar() Desarrollo de aplicaciones .NET Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) SqlConnectionconnection= new SqlConnection(aConnectionString); SqlCommandcommand= new SqlCommand( "SELECT COUNT(*) FROM Production.Product", connection); command.CommandType= CommandType.Text; connection.Open(); intcount= (int)command.ExecuteScalar(); connection.Close(); using(SqlConnectionconnection= new SqlConnection(aConnectionString)) { connection.Open(); using(SqlCommandcommand= new SqlCommand( "SELECT AVG(ListPrice) FROM Production.Product", connection)) { command.CommandType= CommandType.Text; decimal count= (decimal) command.ExecuteScalar(); // Use queryresult. } // Disposecommandobject. } // Dispose(close) connectionobject.
  • 35. ADO.Net •Ejemplo de ExecuteXmlReader() Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) using(SqlConnectionconnection= new SqlConnection(aConnectionString)) { connection.Open(); using( SqlCommandcommand= new SqlCommand("SELECT Name, ListPriceFROM Production.ProductFOR XML AUTO“,connection) ) { command.CommandType= CommandType.Text; XmlReaderreader= command.ExecuteXmlReader(); while(reader.Read()) { // ProcessXML node. } reader.Close(); } // Disposecommandobject. } // Dispose(close) connectionobject.
  • 36. ADO.Net •Ejemplo de ExecuteNonQuery() 1/2 Desarrollo de aplicaciones .NET Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) public static void ExecuteNonQueryExample(IDbConnectioncon) { // Create and configure a new command. IDbCommandcom= con.CreateCommand(); com.CommandType= CommandType.Text; com.CommandText= "UPDATE Employees SET Title = 'Sales Director' WHERE EmployeeId= '5'"; // Execute the command and process the result. intresult= com.ExecuteNonQuery(); // Checktheresultif(result== 1) { Console.WriteLine("Employeetitleupdated."); } else{ Console.WriteLine("Employee title not updated."); } }
  • 37. ADO.Net •Ejemplo de ExecuteNonQuery() 2/2 Desarrollo de aplicaciones .NET Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) using(SqlConnectionconnection= new SqlConnection(aConnectionString)) { connection.Open(); using(SqlCommandcommand= new SqlCommand("uspUpdatePrice", connection)) { command.CommandType= CommandType.StoredProcedure; command.Parameters.Add("@prmProductID", SqlDbType.Int).Value= aProductID; command.Parameters.Add("@prmAmount", SqlDbType.Money).Value= anAmount; introwsAffected= command.ExecuteNonQuery(); if(rowsAffected== 1) Console.WriteLine("Theproducthas beenupdatedsuccessfully."); elseConsole.WriteLine("Theproducthas notbeenupdated."); } // Disposecommandobject. } // Dispose(close) connectionobject.
  • 38. ADO.Net •Ejemplo de ExecuteNonQuery() 2/2 –StoredProcedure. Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) CREATE PROCEDURE dbo.uspUpdatePrice( @prmProductIDint, @prmAmountmoney) ASBEGINUPDATE Production.ProductSET ListPrice= ListPrice+ @prmAmountWHERE ProductID=@prmProductIDEND
  • 39. ADO.Net •Ejemplo de Comandos Paramétricos1/2 Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) stringsql= "SELECT Name, ListPriceFROM Production.ProductWHERE NameLIKE @NamePart"; using(SqlConnectionconnection= new SqlConnection(aConnectionString)) { connection.Open(); using(SqlCommandcommand= new SqlCommand(sql, connection)) { command.CommandType= CommandType.Text; command.Parameters.Add("@NamePart", SqlDbType.NVarChar, 50).Value= aName; using(SqlDataReaderreader= command.ExecuteReader()) { while(reader.Read()) { Console.WriteLine("Productname: {0}", reader.GetString(0)); Console.WriteLine("Productprice: {0}", reader.GetDecimal(1)); } } // Disposedata reader. } // Disposecommandobject. } // Dispose(close) connectionobject.
  • 40. ADO.Net •Ejemplo de Comandos Paramétricos2/2 Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) using(SqlConnectionconnection= new SqlConnection(aConnectionString)) { connection.Open(); using(SqlCommandcommand= new SqlCommand("uspGetProductsAbovePrice“,connection)) { command.CommandType= CommandType.StoredProcedure; command.Parameters.Add("@prmPrice", SqlDbType.Money).Value= aPrice; command.Parameters.Add("@prmAverage", SqlDbType.Money).Direction= ParameterDirection.Output; command.Parameters.Add("@RETURN_VALUE", SqlDbType.Int).Direction= ParameterDirection.ReturnValue; using(SqlDataReaderreader= command.ExecuteReader()) { while(reader.Read()) { Console.WriteLine("Productname: {0}", reader.GetString(0)); Console.WriteLine("Productprice: {0}", reader.GetDecimal(1)); } } // Dispose(close) data readerobject. decimal average= (decimal) command.Parameters["@prmAverage"].Value; Console.WriteLine("Averagepriceabovethreshold: {0}", average); intcount= (int) command.Parameters["@RETURN_VALUE"].Value; Console.WriteLine("Numberof productsabovethreshold: {0}", count); } // Disposecommandobject. } // Dispose(close) connectionobject.
  • 41. ADO.Net •Ejemplo de Comandos Paramétricos2/2 Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) CREATE PROCEDURE dbo.uspGetProductsAbovePrice( @prmPricedecimal, @prmAveragedecimal OUTPUT) ASBEGINDECLARE @varCountintSELECT@prmAverage=AVG(ListPrice), @varCount=COUNT(*) FROMProduction.ProductWHEREListPrice> @prmPriceSELECTName, ListPriceFROMProduction.ProductWHEREListPrice> @prmPriceRETURN @varCountEND
  • 42. ADO.Net •Ejemplo de DataReader1/4 Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) usingSystem.Data.SqlClient; classDataReaderExample{ publicstaticvoidMain() { SqlConnectionCn= new SqlConnection( "Data Source=localhost; IntegratedSecurity=SSPI; InitialCatalog=example"); SqlCommandCmd= Cn.CreateCommand(); Cmd.CommandText= "SELECT Name, AgeFROM Employees"; Cn.Open(); SqlDataReaderRdr= Cmd.ExecuteReader(); while(Rdr.Read()) { System.Console.WriteLine( "Name: {0}, Age: {1}“, Rdr.GetString(0), Rdr.GetInt32(1)); } Rdr.Close(); Cn.Close(); } }
  • 43. ADO.Net •Ejemplo de DataReader2/4 Desarrollo de aplicaciones .NET Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) classProgram{ staticvoidMain(string[] args) { SqlConnectionStringBuilderscb= new SqlConnectionStringBuilder(); scb.DataSource= @".SQLExpress"; scb.InitialCatalog= "TestDB"; scb.IntegratedSecurity= true; SqlConnectionconn= new SqlConnection(scb.ConnectionString); conn.Open(); SqlCommandcmd= conn.CreateCommand(); cmd.CommandText= "SELECT * FromUsers"; SqlDataReaderrdr= cmd.ExecuteReader(); while(rdr.Read()) { Console.WriteLine(string.Format("User{0}, Full Name{1} {2}", rdr.GetString(rdr.GetOrdinal("UserName")), (string)rdr["FirstName"], rdr.GetString(rdr.GetOrdinal("LastName")))); } rdr.Close(); conn.Close(); Console.ReadLine(); } }
  • 44. ADO.Net •Ejemplo de DataReader3/4 Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) classProgram{ staticvoidMain() { stringconnectionString= "Data Source=(local);InitialCatalog=Northwind; IntegratedSecurity=SSPI"; stringqueryString= "SELECT CategoryID, CategoryNameFROM dbo.Categories;"; using(SqlConnectionconnection= new SqlConnection(connectionString)) { SqlCommandcommand= connection.CreateCommand(); command.CommandText= queryString; try{ connection.Open(); SqlDataReaderreader= command.ExecuteReader(); while(reader.Read()) { Console.WriteLine("t{0}t{1}“, reader[0], reader[1]); } reader.Close(); } catch (Exceptionex) { Console.WriteLine(ex.Message); } } } }
  • 45. ADO.Net •Ejemplo de DataReader4/4 Desarrollo de aplicaciones .NET Eduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) staticvoidHasRows(SqlConnectionconnection) { using(connection) { SqlCommandcommand= new SqlCommand("SELECT CategoryID, CategoryNameFROM Categories;“, connection); connection.Open(); SqlDataReaderreader= command.ExecuteReader(); if(reader.HasRows) { while(reader.Read()) { Console.WriteLine("{0}t{1}", reader.GetInt32(0), reader.GetString(1)); } } else{ Console.WriteLine("No rowsfound."); } reader.Close(); } }
  • 46. ADO.Net •Ejemplo de DataAdapter/DataSet: Llenado de un DataSetcon una Tabla Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) privatevoidFillUserTable() { DataSetmyData= new DataSet(); string connectionString= "Data Source=(local);Initial Catalog=Test;IntegratedSecurity=SSPI;"; using (SqlConnectiontestConnection= new SqlConnection(connectionString)) { SqlCommandtestCommand= testConnection.CreateCommand(); testCommand.CommandText= "Select* fromuserTable"; SqlDataAdapterdataAdapter= new SqlDataAdapter(testCommand); dataAdapter.Fill(myData, "UserTable"); } // testConnection.Disposecalledautomatically. }
  • 47. ADO.Net •Ejemplo de DataAdapter/DataSet: Llenado de un DataSetde 2 Tablas Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) privatevoidbuttonFillData_Click(objectsender, EventArgse) { stringconnectionString= "Data Source=(local);Initial Catalog=Test;IntegratedSecurity=SSPI;"; DataSetuserData= new DataSet(); using (SqlConnectiontestConnection= new SqlConnection(connectionString)) { SqlCommandtestCommand= testConnection.CreateCommand(); testCommand.CommandText= "Select FirstName, LastNamefrom userTable;" + " SelectPermissionTypefromPermissionsTable"; SqlDataAdapterdataAdapter= new SqlDataAdapter(testCommand); dataAdapter.Fill(userData); } // testConnection.Disposecalledautomatically. }
  • 48. ADO.Net •Ejemplo de DataAdapter/DataSet: Llenado de un DataSetde 2 Tablas mediante un StoredProcedure Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Create Procedure GetMultipleResultsAsBeginSelect FirstName, LastNamefrom userTable; Select PermissionTypefrom PermissionsTable; End
  • 49. Que veremos la próxima sesión? •Windows Formsy Aplicaciones Desarrollo de aplicaciones .NETEduardo Rivera Alva-MCTS.Net(eriveraa@gmail.com)
  • 50. Desarrollo de aplicaciones .NETEduardo Rivera Alva -MCTS.Net (eriveraa@gmail.com) Fin de la sesión •Dudas, comentarios, sugerencias? •Comunicarse por email a eriveraa@gmail.com •Gracias por su atención !!