Clase IX

 

Objeto SQLConnection y SQLDataReader

 

Objetivo

 

Aquí veremos como consumir datos desde una fuente de datos (en éste caso utilizaremos la base de datos de Northwind de SQL)

 

Duración Aproximada

 

20 minutos

 

Pasos o Recomendaciones

 

 

1)    Primeramente veremos como crear una conexión con SQLServer utilizando el objeto SQLConnection ubicado en el namespace System.Data.SqlClient

 

2)    Vamos a crear un nuevo proyecto llamado Ejercicio4 del tipo aplicación de consola

 

3)    Primeramente vamos a importar los namespaces System.Data y System.Data.SqlClient

 

4)    Luego dentro del método main declararemos un objeto llamado dtEmpresas del tipo DataTable y le agregaremos dos DataColumn llamados CustomerID y CompanyName

 

Static void Main(string[] args)

{

      //Creo un objeto DataTable llamado Empresas

      DataTable dtEmpresas = new DataTable(“Empresas”);

      //Al objeto DataTable le agrego dos datacolumns del tipo string

      dtEmpresas.Columns.Add(“CustomerID”, typeof(string));

      dtEmpresas.Columns.Add(“CompanyName”, typeof(string));

 

5)    Declaramos un objeto sqlconnection llamado myconn y le indicaremos el connectionstring que utilizará (ántes de realizar la operación, se debe verificar que el connection string sea el correcto en el ámbito donde se va a ejecutar)

 

//Creamos un objeto SQLConnection

SqlConnection myconn = new SqlCOnnection();

//Indicamos el Cnnectin String que utilizará

Myconn.ConnectionString = “Data Source=LOCALHOST;Initial CaTalog=Northwind;User ID=sa,Pwd=123”;

 

 

6)    Creamos un objeto SQLCommand y le indicamos la cadena TSQL que utilizará y el objeto sqlconnection que utilizará

 

//Creo un objeto SQLCommand

SqlCommand mycomando = new SqlCommand();

//Le indico la cadena TSQL que utilizará

Mycomando.CommandText = “SELECT CustomerID, CompanyName FROM Customers”;

//Indico el objeto connection que utilizará

Mycomando.Connection = myconn;

 

 

7)    Creamos ahora un objeto SQLDataReader y le indicamos el Select Command Text y el objeto slqconnection que utilizará

                                                 

//Creamos un adaptador del tipo SqlAdapter y le indicamos el command text

//que utilizará la consulta y el objeto connection que utiliza

SqlDataAdapter myadap = new SqlDataAdapter (“SELECT CustomerID, CompanyName FROM Customers”, myconn)

 

 

8)    Ahora abrimos la coneccion con la base de datos. Creamos un objeto DataReader llamado mydr e invocamos el método ExecuteReader del objeto mycomando que anteriormente hemos creado.

 

9)    Luego cargamos el objeto dtEmpresas, utilizando el método Load y pasandole en el argumento el objeto Datareader. Por último cerramos la coneccion

 

//Abro la conexión

myconn.Open();

//Creo un objeto DataReader y ejecuto el método ExecuteReader del objeto mycomando

SqlDataReader mydr = mycomando.ExecuteReader();

//Cargo los datos en el datatable utilizando el objeto DataReader

dtEmpresas.Load(mydr);

myconn.close;

 

 

10)Por último vamos a recorrer los registros obtenidos y representarlos en la consola

 

//Recorro la lista de empresas obtenidas y lo muestro en consola

Console.WriteLine(“Listado de Empresas: ”);

foreach (DataRow rowEmpresa in dtEmpresas.Rows)

{

      string idempresa = rowEmpresa[“CustomerID”].ToString();

      string nombreempresa = rowEmpresa[“CompanyName”].ToString();

      Console.WriteLine (idempresa + “ – + nombreempresa);

}

Console.ReadLine();

 

 

11)El resultado final será el siguiente:

 

Hasta aquí, hemos aprendido a llenar un datatable por medio de su método Load y indicandole un objeto DataReader.


 

 

Objeto SQLConnection y SQLDataAdapter (.Fill)

 

Objetivo

 

Obtener conocimientos básicos en el manejo de los objetos connection y el objeto dataadapter

 

Duración Aproximada

 

15 minutos

 

Pasos o Recomendaciones

 

1)    Basado en el ejercicio anterior (de la clase pasada) , ahora veremos de realizar la mísma operación pero utilizando el objeto DataAdapter en ves del objeto DatarReader.

 

2)    Lo que vamos a hacer primeramente es eliminar el código que se muestra encuadrado a continuación

 

//Creamos un objeto SQLConnection

SqlConnection myconn = new SqlConnection();

//Indicamos el Cnnectin String que utilizará

Myconn.ConnectionString = “Data Source=BEYOND07;Initial CaTalog=Northwind;User ID=sa,Pwd=123”;

 

//Creo un objeto SQLCommand

SqlCommand mycomando = new SqlCommand();

//Le indico la cadena TSQL que utilizará

Mycomando.CommandText = “SELECT CustomerID, CompanyName FROM Customers”;

//Indico el objeto connection que utilizará

Mycomando.Connection = myconn;

 

//Abro la conexión

myconn.Open();

//Creo un objeto DataReader y ejecuto el método ExecuteReader del objeto mycomando

SqlDataReader mydr = mycomando.ExecuteReader();

//Cargo los datos en el datatable utilizando el objeto DataReader

dtEmpresas.Load(mydr);

myconn.close;

 

      //Recorro la lista de empresas obtenidas y lo muestro en consola

      Console.WriteLine(“Listado de Empresas: ”);

 

 

3)    En el lugar que previamente borramos creamos un objeto SQLDataAdapter y le indicamos el Select Command Text y el objeto slqconnection que utilizará

 

//Creamos un adaptador del tipo SqlAdapter y le indicamos el command text

//que utilizará la consulta y el objeto connection que utiliza

SqlDataAdapter myadap = new SqlDataAdapter (“SELECT CustomerID, CompanyName FROM Customers”, myconn)

 

 

4)    Ahora abrimos la coneccion con la base de datos y rellenamos el contenido obtenido en el objeto DataTable llamado dtEmpresas. Por último cerramos la coneccion

 

//Abro la conexión

myconn.Open();

//Cargo el contenido del resultset obtenido de la BD en el objeto datatable

myadap.Fill(dtEmpresas);

//Cierro la conexión

myconn.close;

 

 

Por último ejecutamos la aplicación presionando F5 y vermos los mismos resultados que ántes

 

1)    Hasta aquí, hemos aprendido a llenar utilzando el método fill del objeto dataadapter para llenar el contenido en un datatable


 

 

 

Objeto SQLConnection y SQLDataAdapter (.Update)

 

Objetivo

 

Obtener conocimientos básicos en el manejo de los objetos connection y el objeto dataadapter utilizando el método Update()

 

Duración Aproximada

 

20 minutos

 

Pasos o Recomendaciones

 

1)    Basado en el ejercicio anterior, ahora veremos de realizar la mísma operación pero vamos a realizar cambios en nuestro datatable y luego volcarlos a la base de datos. De ésta manera pondremos en práctica el modelo de acceso a datos desconectados.

2)    Utilizando el mísmo ejercicio anterior vamos a ubicarnos al final del código y vamos a agregar el siguiente código.

 

//Primero indico el customerID que deseo modificar

Console.Write (“Escriba el CustomerID que desea modificar: ”);

string custid = Console.ReadLine();

 

 

3)    Ahora recorremos la colección de datarows en busca del customerid

 

//Luego me traigo una colección de datarows que contengan este customerid

DataRow[] rwempresas = dtEmpresas.Select(“CustomerID = ‘” + custid + “’” )

if (rwempresas.Length ¡= 1) //Si no encuentro nada entonces salgo

{

      Console.WriteLine(“CustomerID no encontrado”);

      Console.ReadLine();

      return;

}

 

 

4)    Si no llegaramos a encontrar el customerid entonces enviamos un mensaje y finalizamos la ejecucion del programa

 

5)    Si encontramos el customerid, entonces me traigo el DataRow correspondiente que tiene dicho customerid y muestro en consola el nombre original y solicito un nuevo nombre para dicha empresa:

 

//Me traigo el primer datarw de la colección

DataRow rwMiEmpresa = rwempresas[0];

string nombreactual = rowMiEmpresa[“CompanyName”].ToString();

//Muestro en consola el nombre del customerid seleccionado

Console.WriteLine(“Nombre actual de la empresa: ” + nombreactual);

//Solicito que escriba un nuevo nombre

Console.Write (“Escriba el nuevo nombre: “);

string nuevonombre = Console.ReadLine();

 

 

6)    Ahora que eh obtenido el nuevo nombre, modifico el datarow, pero primeramente hay que llamar al método .BeginEdit del propio datarow para luego poder asignarles valores y por último se debe llamar el método EndEdit() como se muestra en la siguiente figura:

 

//Llamo al método BeginEdit del datarow para iniciar los cambios

rowiEmpresa.BeginEdit();

//Modifico el valor del campo CompanyName

rowMiEmpresa[“CompanyName”] = nuevonombre;

//Finalizo la edicion llamando al métdo EndEdit()

rowMiEmpresa.EndEdit();  

 

 

7)    Creamos un objeto command que será utilizado por el dataadapter para poder realizar los cambios necesarios en la base de datos. El objeto command que crearemos se llamará updcomando y le debemos indicar la cadena TSQL que utilizará para llamar a la BD y los parámetros que utiliza, tanto como su nombre, el tipo de dato, la longitud y el nombre del campo de nuestro datatable.

 

//Ahora creo un objeto Cmmand que utilizare para guardar los cambios en la BD

SqlCommand updCmmand = new SqlCommand();

//Le indico la cnexion

Updcommand.Connection = myconn;

//Le indico la cadena TSQL

Updcommand.CommandText = “UPDATE Customers SET CompanyName = @CompanyName WHERE CustomerID = @CustomerID”;

//Indico los paráms que estoy usando, el tipo y longitud del dato y el nombre del campo del datatable

Updcommand.Parameters.Add(“@CompanyName”, SqlDbType.nVarChar, 50, “CompanyName”)

Updcommand.Parameters.Add(“@CustomerID”, SqlDbType.nVarChar, 5, “CustomerID”)

 

 

8)    Por último adjuntamos éste objeto a nuestro DataAdapter (myada) para luego invocar su método .Update() e indicarle el datatable que tiene que actualizar contra la base de datos.

 

//Ahora adjunto el objeto updcommand al dataadapter

myadap.UpdateCommand = updcommand;

//Por ultimo llamo al método .Update del DataAdapter

myadap.Update(dtEmpresas);

 

 

9)    Hasta aquí hemos aprendido a consultar en la base de datos, traer los resultados y guardarlos en un objeto en memoria (datatable), modificar su contenido y volver a conectarnos a la base de datos para guardar los cambios.

 

10)De ésta manera se ve reflejado la importancia y trabajar en forma desconectada.

 


 

 

DataBinding

 

 

Duración Aproximada

 

35 minutos

 

Pasos o Recomendaciones

 

1)    En éste ejercicio mostraremos básicamente como enlazar datos de un origen de datos con un control de WinForms,

 

2)    Para ello crearemos un proyecto del tipo “Windows Application” con el nombre de “Ejercicio7”

 


3)    Primermente arrastraremos desde nuestro ToolBox en la sección “Data”, arrastraremos y colocaremos el control DataGridView sobre nuestro formulario “Form1”, una vez colocado resaltará un cuadro de tareas correspondiente al DataGridView de donde seleccionaremos de “Choose Data Source” la opcion “Add Project Data Source…”

 


4)    Una ves que seleccionamos “Add Project Data Source..” aparecerá un cuadro con templates, de donde seleccionaremos “DataBase”


5)    Seleccionamos DataBase, luego “Next”, luego presionamos el boton “New Connection...”. luego veremos un cuandro de dialogo para seleccionar el origen y la base de datos. (dependiendo del ambito donde se desarrolle el curso, se deberia verificar primeramente el nombre y la instancia de sql donde resida una base de datos Northwind).

 

6)    Una vez que hallamos presionado “Ok”, VisualStudio nos notificará que es dentro de la cadena de coneccion hay datos importantes (nombre de usuario, contraseña), Presionamos “Yes” sobre el cuado de dialogo”

 

7)    Ahora VisualStudio nos brinda la posibilidad de guardar el conecction string dentro de un archivo externo de configuración, ya que si en el día de mañana cambia la ubicación del servidor, o las claves, etc, habria que entrar al código de la aplicación para modificar y volver a recompliar el programa. De ésta manera queda guardado en un archivo externo a la aplicación.

 


8)    Por último seleccionaremos de Tablas, la tabla Customers, y de ahí seleccionaremos únicamente los campos CustomerID y CompanyName. Por último presionamos “Finish”.

 


9)    Luego de finalizado el asistente veremos que el control DataGridView esta enlazado con un control llamado “customerBindingSource”, que a su ves éste control esta enlazado con un northwindDataSet (un dataset tipado que ha creado) y un customerDataTable que utilizara para realizar las consultas y/o modificaciones sobre la base de datos.

 

10)Si presionamos F5 veremos que automaticamente se rellena el contenido en el control DataGridView

 

11)Fin del ejercicio