He notado con frecuencia en los diferentes foros de programación que hay en la web preguntar como saber si un registro existe en la bd, como también recuperar el id de un registro desde el código de nuestra aplicacion pues bien en este articulo se explicara como hacerlo.
En este articulo trataremos los siguientes puntos.Comprobar si un registro existe por medio del id.
Recuperar el ultimo id ingresado e ir incrementándolo.
Comprobar Datos antes de ingresar un registro.El ejemplo esta desarrollado en visual estudio 2010 en c# y vb.net y se usa sqlexpres 2008.Para este ejemplo uso una base de datos llamada
Database que cuenta con una tabla
Personas.
La aplicacion tiene el siguiente diseño.
Ahora empezamos a programar aclaro que solo explicare el ejemplo en c#(por motivos de pereza jeje) pero en mi blog podrán encontrar la explicación y descarga tanto en c# como vb.net.
Agreguemos una clase a nuestro proyecto llamado
Datos aquí tendremos todos los métodos que usaremos para que desde el código de nuestro formulario solo los llamemos.
Veamos primeramente el
método que se encargara de cargar todos los datos de nuestra bd.
public static DataTable Cargar()
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
{
DataTable dt = new DataTable();
string query = "SELECT * FROM PERSONAS ORDER BY Id ASC";
SqlCommand cmd = new SqlCommand(query, conn);
SqlDataAdapter adap = new SqlDataAdapter(cmd);
adap.Fill(dt);
return dt;
}
}
Este código ya es conocido por todos ya que en casi todos mis artículos los uso para cargar los datos de la bd, es un método que retorna un
datatable con todos los datos de la bd.
Ahora veamos el
método que nos servirá para
comprobar si un registro existe o no
public static bool Existe(int id)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
{
string query = "SELECT COUNT(*) FROM PERSONAS WHERE ID=@Id";
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("Id", id);
conn.Open();
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count == 0)
return false;
else
return true;
}
}
Tenemos el método
Existe que es de tipo bool y que también recibe un parámetro en este caso sera el id que sera por el cual comprobaremos si el registro existe, vemos que en la consulta a la bd usamos la instrucción
COUNT que devuelve el numero de registros que existe con ese id, también usamos el método
ExecuteScalar() para comprobar si encontró registro con el id si el valor es cero es porque no existe el registro entonces retornamos false y retornamos true si ya existe el registro es decir que si encontró registro con ese id.
Ahora veamos como recuperar el ultimo id ingresado, esto lo aremos porque el campo id no es
autonumerico por eso necesitamos obtener por medio de código cual sera el próximo valor a ingresar.
public static int RecuperarId()
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
{
string query = "SELECT MAX(Id) FROM PERSONAS";
SqlCommand cmd = new SqlCommand(query, conn);
conn.Open();
return Convert.ToInt32(cmd.ExecuteScalar());
}
}
Tenemos el método
RecuperarId que retorna un valor numérico que sera el valor del ultimo id, vemos que en la query a nuestra bd usamos la función
MAX de sql que devuelve el valor máximo de un campo de nuestra tabla en este caso el id y por ultimo retornamos ese valor usando nuevamente el método
ExecuteScalar.
Por ultimo tenemos el método
Insert que nos servirá para insertar un nuevo registro.
public static void Insert(int id, string nombre, string apellido, int edad)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
{
string query = "INSERT INTO PERSONAS(Id,Nombre,Apellido,Edad) VALUES(@Id,@Nombre,@Apellido,@Edad)";
id = RecuperarId() + 1;
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("Id", id);
cmd.Parameters.AddWithValue("Nombre", nombre);
cmd.Parameters.AddWithValue("Apellido", apellido);
cmd.Parameters.AddWithValue("Edad", edad);
conn.Open();
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("Registro Ingresado con Exito...");
}
catch (Exception)
{
MessageBox.Show("Error no se Pudo Ingresar el Registro...");
}
}
}
creamos el método
Insert y le pasamos los parámetros para insertar un nuevo registro, luego hacemos la query a la bd para hacer el insert y le pasamos los parámetros de cada campo, algo importante de mencionar es que antes de enviar el parámetro del id calculamos su valor haciendo uso del método
RecuperarId que como dijimos devuelve el valor máximo de id entonces a este solo le sumamos 1 para que siempre se vaya incrementado en 1.
Eso seria todo en nuestra clase Datos.
Ahora en el evento load de nuestro formulario cargamos todos los datos.
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = Datos.Cargar();
}
Lo único que hacemos es
cargar todos los datos de nuestro tabla llamando el método.
Cargar.
Ahora en el
evento del botón que usaremos para comprobar si existe el registro tendremos el siguiente código.
private void btncomprobar_Click(object sender, EventArgs e)
{
if (!Datos.IsNumeric(txtcomprobar.Text))
MessageBox.Show("Ingres un Valor Numerico...");
else
{
if (!Datos.Existe(Convert.ToInt32(txtcomprobar.Text)))
MessageBox.Show("Registro No Existe...");
else
MessageBox.Show("Registro Ya Existe...");
}
}
Antes de comprobar si existe el registro por medio del id comprobamos que el dato ingresado sea
numérico si lo es entonces llamamos al método
Existe y le pasamos el valor ingresado y mostramos los respectivos mensajes si el id ya existe o no.
Ahora en el
evento del botón que usaremos para agregar un nuevo registro tendremos lo siguiente.
private void btnagrear_Click(object sender, EventArgs e)
{
if (!Datos.IsNumeric(txtid.Text) | !Datos.IsNumeric(txtedad.Text))
{
MessageBox.Show("Ingres un Valor Numerico...");
}
else
{
if (!Datos.Existe(Convert.ToInt32(txtid.Text)))
{
Datos.Insert(Convert.ToInt32(txtid.Text), txtnombre.Text, txtapellido.Text, Convert.ToInt32(txtedad.Text));
dataGridView1.DataSource = Datos.Cargar();
}
else
{
MessageBox.Show("Id Ya Existe...");
}
}
}
Antes de ingresar hacemos
2 validaciones primero comprobamos que el los datos del id y la edad sean numéricos y también validamos que el id ingresado no exista si pasa las 2 validaciones agregamos el registro si no mostramos un mensaje que no se pudo agregar.
Eso es todo saludos... Pueden descargar los ejemplos desde mi blog.http://cristiantorresalfaro.blogspot.com/2012/07/comprobar-si-existe-registro-en-bd-c.html