Wednesday, September 30, 2009

C# Conectar a BD

La forma de conectar a datos en ADO.NET a variado de cómo la realizábamos en ado. Existe nuevo modelo de objetos y nuevos métodos para conectar con las bases de datos. En este artículo explicaré las formas más comunes de conectar a SQL Server u otro origen de datos a través de SqlClient, OleDb y ODBC.

ADO.NET ofrece varios espacios de nombres para acceder a datos, entre ellos:



Antes de poder utilizar cualquiera de estos espacios de nombres debemos incluirlos en nuestro proyecto de la siguiente forma:

En C#
using System.Data.SqlCliente;

En VB.NET
imports System.Data.SqlClient

Los objetos Connection, Command, DataReader y DataAdapter son los elementos fundamentales de ADO.NET:

El objeto Connection.

La conexión a SQl Server la realizaremos con el objeto SqlConnection del espacio de nombre System.Data.SqlClient. .NET framework proporciona varios objetos Connection, uno para cada tipo de espacio de nombres. De este modo para OleDb existe un objeto OleDbConnection del espacio de nombre System.Data.OleDb y para ODBC existe un OdbcConnection del espacio de nombres System.Data.Odbc si utilizamos .NET Framework 1.1 o del espacio de nombres Microsoft.Data.Odbc si utilizamos la versión 1.0.

Ejemplo de conexión (todos los ejemplos estan realizados en c#):

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

Una vez terminada la conexión es recomendable cerrar las conexiones con el metodo Close:

SqlConn.Close();
//
OledbConn.Close();
//
OdbcConn.Close();




El objeto Command.

El siguiente objeto que utilizaremos una vez realizada la conexión es el objeto SqlCommand que igual que pasaba con el objeto connection .NET framework proporciona varios objetos Command dependiendo del proveedor.
El objeto Command tiene varios métodos Execute para ejecutar comandos a un origen de datos:



Además de estos comandos comunes a todos los proeedores, SqlClient incorpora ExecuteXmlReader para ser utilizado con un XmlReader y una consulta SQL que devuelva XML (Select …… FOR XML).

Ejemplos de Command.

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

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

El ejemplo para ODBC sería igual cambiando los objetos OleDb por ODBC.

El objeto DataReader

Este objeto va a permitirnos extraer un conjunto de resultados y listarlos (forward-only y read-only). Los resultados son devueltos al ejecutar una consulta y accesibles mediante el método read del objeto DataReader. Para utilizar este objeto debemos llamarlo desde el metodo ExecuteReader del objeto Command de la siguiente forma:

SqlDataReader mReader = myCommand.ExecuteReader();

Mediante el método read obtenemos una fila de la consulta y para obtener las columnas de cada fila podemos hacerlo mediante métodos de tipos nativos que incorpora el DataReader (GetString, GetInt32, etc…), o utilizando el método GetValue(i). También podemos obtener el nombre de los campos y no solo su valor, con el método GetName(i) obtenemos dicho nombre, siendo i el número de columna que quermos mostrar.

Una vez hemos acabado de trabajar con el DataReader tenemos que cerrarlo con el método Close().

Ejemplo DataReader:

SqlConnection SqlConn = new SqlConnection("server=localhost;uid=sa;pwd=;database=PUBS");
SqlCommand SqlCom = new SqlCommand("Select * from authors", SqlConn);
SqlConn.Open();
SqlDataReader myReader = SqlCom.ExecuteReader();

while (myReader.Read()){
Console.WriteLine (myReader.GetValue(0));
}

Console.WriteLine("Pulsar una tecla para cerrar la conexión ...");
Console.ReadLine();

myReader.Close();
SqlConn.Close();

El mismo ejemplo utilizando ODBC.

OdbcConnection OdbcConn = new OdbcConnection("DSN=Pubs;UID=sa;PWD=;");
OdbcCommand OdbcCom = new OdbcCommand("Select * from authors", OdbcConn);
OdbcConn.Open();
OdbcDataReader myReader = OdbcCom.ExecuteReader();

while (myReader.Read()){
Console.WriteLine (myReader.GetValue(0));
}

Console.WriteLine("Pulsar una tecla para cerrar la conexión ...");
Console.ReadLine();

myReader.Close();
OdbcConn.Close();

Un DataReader también lo podemos asignar a un método DataSource de un control web form de la siguiente forma:

DataGrid1.DataSource = oCommand.ExecuteReader();

En este caso lo enlazaríamos a un DataGrid.


Referencia
http://www.netveloper.com/contenido2.aspx?IDC=83_0

:: Clases del Namesapce de System.Data.SqlCliente
:: Clases del Namesapce de System.Data.OleDb
:: Download del ODBC .NET Data Provider para .Net Framework 1.0
:: Clases del Namesapce de System.Data.Odbc para .NET Framework 1.1

No comments:

Firefox open multiple private window

    /opt/firefox/firefox-bin --profile $(mktemp -d) --private-window www.google.com www.bing.com