Sie sind auf Seite 1von 5

C# ADO.

.NET - Parte 2 - Recuperar Informacin MS Access Introduccin Con este ejemplo intento demostrar como con algunos simples cambios se puede utilizar ado.net de una forma similar tanto si se accede a sql server como si es Access la base de datos utilizada Este post esta adaptado de la primera parte C# ADO.NET - Recuperar Informacin Sql Server Parte 1 por lo tanto muchas de las explicaciones sern obviadas ya que los pasos son idnticos para ambos mtodos. Ante cualquier duda en los paso necesario para utilizar ado.net se podr recurrir al primer articulo ya que la forma de codificar es idntica para Sql Server y Access En los ejemplos se observara que la tcnica puede aplicarse exactamente de la misma forma, solo se ha cambiado los nombre de los objetos utilizados, por ejemplo en lugar de ser SqlConnection se utilizara el OleDbConnection, y as con el resto de los objetos a utilizar. 1 - Recuperar un conjunto de datos (DataReader) En este se recorre mediante el objeto OleDbDataReader los datos recuperados mediante la ejecucin de la consulta. public static List<ContactoEntity> GetAll() { string sql = @"SELECT [IdContacto] ,[Nombre] ,[Apellido] ,[FechaNacimiento] ,[Localidad] ,[Calle] ,[Numero] FROM Contacto"; List<ContactoEntity> list = new List<ContactoEntity>(); using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["default"].ToString())) { OleDbCommand command = new OleDbCommand(sql, conn); conn.Open(); OleDbDataReader reader = command.ExecuteReader(); while (reader.Read()) { list.Add(LoadContacto(reader)); } return list;

} Como se observa el mtodo utilizado para crear la entidad se mantiene exactamente igual, ya que al usarse una interfaz del tipo IDataReader, esta mantiene compatibilidad tanto si proviene de Sql server, como Access private static ContactoEntity LoadContacto(IDataReader reader) { ContactoEntity contacto = new ContactoEntity(); contacto.IdContacto = Convert.ToInt32(reader["IdContacto"]); contacto.Nombre = Convert.ToString(reader["Nombre"]); contacto.Apellido = Convert.ToString(reader["Apellido"]); contacto.FechaNacimiento = Convert.ToDateTime(reader["FechaNacimiento"]); contacto.Localidad = Convert.ToString(reader["Localidad"]); contacto.Calle = Convert.ToString(reader["Calle"]); contacto.Numero = Convert.ToInt16(reader["Numero"]);

return contacto; } 2- Recuperar un conjunto de datos (DataSet) Al igual que el ejemplo planteado en Sql Server, este utiliza un DataSet Tipado es mas, como el DataSet es independiente de la tecnologa utilizada en el acceso a los datos se pudo reutilizar el del ejemplo anterior public static dtoContacto GetAllFromDataSet() { string sql = @"SELECT [IdContacto] ,[Nombre] ,[Apellido] ,[FechaNacimiento] ,[Localidad] ,[Calle] ,[Numero] FROM Contacto"; using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["default"].ToString())) { OleDbCommand command = new OleDbCommand(sql, conn);

OleDbDataAdapter da = new OleDbDataAdapter(command); dtoContacto contactos = new dtoContacto(); da.Fill(contactos, "Contacto"); return contactos; }

} 3 Recuperar un solo registro (DataReader) Debe remarcarse en esta parte del ejemplo que Access tambin permite el uso de parmetros en sus consultas, en este caso al usarse el proveedor: Microsoft.Jet.OLEDB.4.0, los parmetros siguen teniendo el mismo formato que Sql Server, o sea hacen uso de @param, (en donde param es el nombre del parmetro), pero si se utiliza algn otro proveedor de acceso a datos para OleDb puede que esto cambie, y se necesite hacer uso del signo ?, para especificar la posicin del mismo. public static ContactoEntity GetById(int Id) { string sql = @"SELECT [IdContacto] ,[Nombre] ,[Apellido] ,[FechaNacimiento] ,[Localidad] ,[Calle] ,[Numero] FROM Contacto WHERE IdContacto = @Id"; ContactoEntity product = null; using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["default"].ToString())) { OleDbCommand command = new OleDbCommand(sql, conn); command.Parameters.AddWithValue("Id", Id); conn.Open(); OleDbDataReader reader = command.ExecuteReader(); if (reader.Read()) {

product = LoadContacto(reader); } return product; } } 4 Recuperar un solo registro (DataSet) Aqu hay que resaltar el cambio de enumerado utilizado para definir el tipo de datos del parmetro, siendo elOleDbType public static dtoContacto.ContactoRow GetByIdFromDataSet(int Id) { string sql = @"SELECT [IdContacto] ,[Nombre] ,[Apellido] ,[FechaNacimiento] ,[Localidad] ,[Calle] ,[Numero] FROM Contacto WHERE IdContacto = @Id"; using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["default"].ToString())) { OleDbCommand command = new OleDbCommand(sql, conn); OleDbParameter param = new OleDbParameter("Id", OleDbType.Integer); param.Value = Id; command.Parameters.Add(param); OleDbDataAdapter da = new OleDbDataAdapter(command); dtoContacto contactos = new dtoContacto(); da.Fill(contactos, "Contacto"); if (contactos.Contacto.Rows.Count > 0) return contactos.Contacto.Rows[0] as dtoContacto.ContactoRow; else return null; } }

Conclusin

Una vez se comprenda el concepto general de los objetos implicados en las consultas a las base de datos, las diferencias son mnimas, conociendo los objetos de ADO.NET bsicos se puede consultar cualquier base de datos con pequeos cambios y lo aprendido para trabajar con una base de datos especifica pueden aplicarse al resto.

Das könnte Ihnen auch gefallen