Você está na página 1de 33

Captulo XIII: Trabajo con base de datos

C# .NET 2005 MCPD Ing. Cecilia Wiesse

Contenido
Acceso a datos en C# .NET con ADO.NET Aplicativo Maestro detalle Informes e impresin en aplicaciones Windows Forms Distribucin de las aplicaciones

Espacios de nombres
System.Data System.Data.Common System.Data.SqlClient System.Data.OleDb Microsoft.SqlServer.Server

Arquitectura

Objetos Comunes
Base de datos
Gestiona la conexin a una base de datos Ejecuta un comando de consulta en la base de datos

Connection Connection Command Command

Intercambia datos entre el conjunto de datos y la base de datos Almacena datos en un cach distinto de la base de datos Proporciona acceso eficaz a un flujo de datos de slo lectura

DataAdapter DataAdapter DataSet DataSet DataReader DataReader

System.Data
Fundamento de la infraestructura de acceso a datos
Contiene clases de definicin base de los objetos de datos
DataColumn DataType DataRow DataTable DataSet

System.Data.Common
Clases base que determinan la funcionalidad de otras clases en los espacios de nombres especficos
DbDataAdapter DbCommand DbConnection DbDataReader

System.Data.SqlClient
Especfica para acceder a bases de datos SQL Server
Optimizada en su comunicacin con dicha base Implementa formas especficas de los mismos objetos existentes en Common por herencia SqlDataAdapter SqlCommand SqlConnection

System.Data.OleDb
Utiliza los proveedores OleDb para acceder a cualquier base de datos compatible, heredando de Common
OleDbDataAdapter OleDbCommand OleDbConnection

Obteniendo datos
DataAdapter Connection Command DataReader

DataSet

TableAdapter Connection Command DataReader

DataTable

10

Proveedores de datos
Objetos de Proveedores de Datos .NET Connection Propsito Objeto SQL Server Objeto para un origen OLEDB

Provee conectividad a un Origen de Datos Provee acceso a comandos de Base de Datos como Select, Delete, Insert y Update Provee acceso a datos de solo lectura Utiliza el objeto Connection para enlazar un objeto DataSet con un Proveedor de Datos. Tambin permite actualizar los Datos en el origen a partir de las modificaciones hechas en el DataSet.

SqlConnection

OleDBConnection

Command

SqlCommand

OleDBCommand

DataReader

SqlDataReader

OleDBDataReader

DataAdapter

SqlDataAdapter

OleDBDataAdapter

11

Actualizando datos
Connection Command ExecuteNonQuery

DataAdapter TableAdapter Connection CommandA CommandE CommandI

Update

12

SQL
Actualizar
UPDATE Oradores SET Nombre = 'Nombre', Apellido = 'Apellido', EsInternacional = 1 where Id=3

Insertar
INSERT INTO Oradores (Nombre, Apellido, EsInternacional) VALUES (N'Nombre', N'Apellido', 1) where Id=3

Eliminar

DELETE FROM Oradores WHERE (Id = 3)

13

Qu es un entorno conectado?
Un entorno conectado es aquel en que los usuarios estn conectados continuamente a una fuente de datos Ventajas:
El entorno es ms fcil de mantener La concurrencia se controla ms fcilmente Es ms probable que los datos estn ms actualizados que en otros escenarios

Inconvenientes:
Debe existir una conexin de red constante Escalabilidad limitada

14

Qu es un entorno desconectado?
Un entorno desconectado es aquel en el que los datos pueden modificarse de forma independiente y los cambios se escriben posteriormente en la base de datos Ventajas:
Las conexiones se utilizan durante el menor tiempo posible, permitiendo que menos conexiones den servicio a ms usuarios Un entorno desconectado mejora la escalabilidad y el rendimiento de las aplicaciones Los datos no siempre estn actualizados Pueden producirse conflictos de cambios que deben solucionarse

Inconvenientes:

15

Conexin
SqlConnection SqlConn = new SqlConnection("server=localhost;uid=sa;pwd=;database=PUBS"); SqlConn.Open(); Using System.Data.OleDb; OleDbConnection OledbConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;UID=sa;PWD=;Initial Catalog=pubs"); OledbConn.Open(); Using System.Data.Odbc; OdbcConnection OdbcConn = new OdbcConnection("DSN=Pubs;UID=sa;PWD=;"); OdbcConn.Open();

16

Objetos command
El objeto Command tiene varios mtodos Execute para ejecutar comandos a un origen de datos:

17

SqlClient
Using System.Data.SqlClient; SqlConnection SqlConn = new SqlConnection("server=localhost;uid=sa;pwd=;database=PUBS"); SqlCommand SqlCom = new SqlCommand("insert into jobs(job_desc, min_lvl, max_lvl) values('Webmaster', '25', '100')", SqlConn); SqlConn.Open(); SqlCom.ExecuteNonQuery (); SqlConn.Close();

18

OleDb y Odbc
Using System.Data.OleDb; OleDbConnection OledbConn = new OleDbConnection ("server=localhost;uid=sa;pwd=;database=PUBS"); OleDbCommand OledbCom = new OleDbCommand ("insert into jobs(job_desc, min_lvl, max_lvl) values('Webmaster', '25', '100')", OledbConn); OledbConn.Open(); OledbCom.ExecuteNonQuery (); OledbConn.Close();

19

SqlCommand/ parmetros
Crear SQL con parmetros Declarar los parmetros
SqlCommand cmd = new SqlCommand( "select * from Customers where city = @City", conn);

SqlParameter param = new SqlParameter(); param.ParameterName = "@City"; param.Value = inputCity;

Adicionar parmetros al SqlCommand


cmd.Parameters.Add(param);

20

Trabajando con orgenes de datos

21

Mediante dataSourse

22

BindingSource (Clase)
Encapsula el origen de datos de un formulario. Espacio de nombres: System.Windows.Forms

BindingNavigator (Clase)
Representa la interfaz de usuario de exploracin y manipulacin para los controles de un formulario que estn enlazados a datos

23

Creando con controles

24

BindingNavigator/BindingSourse
Se enlazan mediante la propiedad BindingSourse

25

Cdigo necesario
Cadena de conexin
string connectString = "Integrated Security=SSPI;Persist Security Info=False;" + "Initial Catalog=Northwind;Data Source=localhost"; SqlConnection connection = new SqlConnection(); connection.ConnectionString = connectString; connection.Open(); public SqlConnection conn = null; conn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;" + "Initial Catalog=Northwind;Data Source=localhost"); conn.Open();

26

Cdigo necesario
SqlCommand
SqlCommand command = new SqlCommand( "Select * From Customers", connection);

SqlCommand con parmetros


SqlCommand cmd = new SqlCommand( "select * from Customers where city = @City", conn);

27

Cdigo necesario
SqlDataReader
Proporciona una forma de leer una secuencia de filas slo hacia delante en una base de datos de SQL Server. Para crear un SQLDataReader se utiliza el mtodo ExecuteReader del SQLCommand.
SqlDataReader reader = command.ExecuteReader( CommandBehavior.CloseConnection);

CommandBehavior.CloseConnection cierra implisitamente la conexin.

28

DataSet
El DataSet guarda la informacin en uno o ms objetos de tipo DataTables. Cada DataTable puede ser poblada con datos de un nico origen.
DataSet ds = new DataSet("Northwind Customers"); ds.Load( reader, LoadOption.OverwriteChanges, new string[] { "Customers" });

Cargamos en la tabla la lectura del DataReader LoadOption:Controla cmo los valores del origen de datos se aplicarn a las filas existentes al utilizar los mtodos Load OverwriteChanges :Los valores de entrada de esta fila se escribirn en las versiones de valores actuales y valores originales de los datos de cada columna. PreserveChanges :Los valores de entrada de esta fila se escribirn en la versin de valores originales de cada columna. La versin actual de los datos de cada columna no se modificar. Upsert :Los valores de entrada de esta fila se escribirn en la versin actual de cada columna. La versin original de los datos de cada columna no se modificar

29

StoredProcedure
SqlCommand se puede utilizar para ejecutar procedimientos almacenados. // 1. crea el command SqlCommand cmd = new SqlCommand("Ten Most Expensive Products",
conn); // 2. define el tipo command // ejecuta el storedprocedure cmd.CommandType = CommandType.StoredProcedure;

30

Con parmetros
SqlCommand cmd = new SqlCommand("CustOrderHist", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@CustomerID", custId));

31

Llenar un DataSet desde mltiples DataAdapter


Se puede usar vario objetos DataAdapter con un DataSet Cada DataAdapter se puede utilizar para llenar uno o varios objetos DataTable.

Se puede utilizar cualquier cantidad de objetos DataAdapter con un DataSet. Cada DataAdapter se puede utilizar para llenar uno o varios objetos DataTable y para reflejar en el origen de datos correspondiente las actualizaciones que sean necesarias. Se pueden agregar de forma local objetos DataRelation y Constraint al DataSet, de manera que se pueden relacionar datos procedentes de varios orgenes distintos.

32

Adicional: StringBuilder. AddFormat


Especificador de formato Coc Dod Eoe Fof Gog Non Pop Ror Xox Nombre Moneda Decimal Cientfico (exponencial) Punto fijo General Nmero Porcentaje Accin de ida y vuelta Hexadecimal

dato.AppendFormat("{0:C} ", rdr["UnitPrice"]);

33