Académique Documents
Professionnel Documents
Culture Documents
using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["default"].ToString())) { OleDbCommand command = new OleDbCommand(sql, conn); command.Parameters.AddWithValue("Id", Id); conn.Open(); int count = Convert.ToInt32(command.ExecuteScalar()); if (count == 0) return false; else return true; } } al igual que el ejemplo del link relacionado, se hace uso de ExecuteScalar, el cual devolver simplemente la primer columna de la primer fila de la consulta. LA funcionalidad que inserta tiene un pequeo detalles que hay que aclararlo ya que puede presentarse problemas en otras circunstancias. Este se presenta al declarar el parmetro de fecha de nacimiento (lneas 28-30), se vera que se crea una variable del tipo OleDbParameter en donde se define el tipo de dato puntualmente. Esto debe ser as ya que el mtodo AddWithValue() no puede determinar para este tipo de dato cual es el correcto, cuando se le pasarle un objeto del tipo DataTime de .net, es por eso que hay que definirlo OleDbType.Date, y de esta forma funciona perfectamente. private static ContactoEntity Insert(ContactoEntity contacto) { string sql = @"INSERT INTO Contacto (IdContacto ,Nombre ,Apellido ,FechaNacimiento ,Localidad ,Calle ,Numero) VALUES (@Id, @Nombre, @Apellido, @FechaNacimiento,
using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["default"].ToString())) { int NextId = MaxId() + 1; OleDbCommand command = new OleDbCommand(sql, conn); command.Parameters.AddWithValue("Id", NextId); command.Parameters.AddWithValue("Nombre", contacto.Nombre); command.Parameters.AddWithValue("Apellido", contacto.Apellido); OleDbParameter param = new OleDbParameter("FechaNacimiento", OleDbType.Date); param.Value = contacto.FechaNacimiento; command.Parameters.Add(param); command.Parameters.AddWithValue("Localidad", string.IsNullOrEmpty(contacto.Localidad) ? (object)DBNull.Value : contacto.Localidad); command.Parameters.AddWithValue("Calle", string.IsNullOrEmpty(contacto.Calle) ? (object)DBNull.Value : contacto.Calle); command.Parameters.AddWithValue("Numero", contacto.Numero.HasValue ? contacto.Numero : (object)DBNull.Value ); conn.Open(); command.ExecuteNonQuery(); contacto.IdContacto = NextId; return contacto; } } Tambin se veras que la funcin MaxId() que permite recuperar el ultimo id ingresado no sufre cambio alguno con respecto a utilizado en una base de datos Sql Server private static int MaxId() { string sql = @"SELECT MAX(IdContacto) FROM Contacto";
OleDbCommand command = new OleDbCommand(sql, conn); conn.Open(); return Convert.ToInt32(command.ExecuteScalar()); } } 2 Actualizacin de la entidad (Update) En la operacin de actualizacin hay que remarcar dos puntos que son importantes y generan cambio con respecto a su equivalente en Sql Server Uno al igual que como sucedi en la funcionalidad de Insert, es necesario definir el tipo de dato explicito para la fecha de nacimiento. El segundo aspecto se refiere a que si bien hasta ahora pensbamos que los nombres de los parmetros guardaban una conexin, bajo la operacin del actualizacin nos damos cuenta que no es tan as. Es por ello que se notara que la creacin de parmetros en este caso el Id ha sido declarado al final del resto, mientras que en si equivalente para Sql Server podra haber sido declarado en cualquier posicin. Esto marca un punto importante durante la actualizacin y es que el nombre sirve para tener una referencia a que parmetro estamos asignando el valor, pero para el provider de base de datos OleDb, lo que importa es la posicin del parmetro en coleccin de Parameters. Si en este cdigo se declarar el parmetro Id en primer lugar la actualizacin no se realizara adecuadamente. private static ContactoEntity Update(ContactoEntity contacto) { string sql = @"UPDATE Contacto SET Nombre = @Nombre ,Apellido = @Apellido ,FechaNacimiento = @FechaNacimiento ,Localidad = @Localidad ,Calle = @Calle ,Numero = @Numero WHERE IdContacto = @Id";
using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["default"].ToString())) { OleDbCommand command = new OleDbCommand(sql, conn); command.Parameters.AddWithValue("Nombre", contacto.Nombre);
command.Parameters.AddWithValue("Apellido", contacto.Apellido); OleDbParameter param = new OleDbParameter("FechaNacimiento", OleDbType.Date); param.Value = contacto.FechaNacimiento; command.Parameters.Add(param); command.Parameters.AddWithValue("Localidad", string.IsNullOrEmpty(contacto.Localidad) ? (object)DBNull.Value : contacto.Localidad); command.Parameters.AddWithValue("Calle", string.IsNullOrEmpty(contacto.Calle) ? (object)DBNull.Value : contacto.Calle); command.Parameters.AddWithValue("Numero", contacto.Numero.HasValue ? contacto.Numero : (object)DBNull.Value); command.Parameters.AddWithValue("Id", contacto.IdContacto); conn.Open(); int rows = command.ExecuteNonQuery(); return contacto; }
3 Eliminacin de la entidad (Delete) Esta operacin no sufre cambio alguno con respecto a su equivalente en Sql Server, salvo los objetos de ado.net utilizados. public static void Delete(int Id) { string sql = @"DELETE FROM Contacto WHERE [IdContacto] = @Id";
using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["default"].ToString())) { OleDbCommand command = new OleDbCommand(sql, conn); command.Parameters.AddWithValue("Id", Id); conn.Open(); command.ExecuteNonQuery(); }