Sunteți pe pagina 1din 7

Comprobar si Existe Registro en BD C# - VB.

Net
jueves, 26 de julio de 2012

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.

1. Comprobar si un registro existe por medio del id.

2. Recuperar el ultimo id ingresado e ir incrementándolo.

3. 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 a programar agreguemos una clase(modulo en el caso de vb.net) 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.

1 public static DataTable Cargar()


{
2 using (SqlConnection conn = new
3 SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
4 {
5 DataTable dt = new DataTable();
6 string query = "SELECT * FROM PERSONAS ORDER BY Id ASC";
SqlCommand cmd = new SqlCommand(query, conn);
7 SqlDataAdapter adap = new SqlDataAdapter(cmd);
8
9 adap.Fill(dt);
return dt;
10 }
11 }
12

1 Public Function Cargar() As DataTable


2 Using conn As New
3 SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
4 Dim dt As New DataTable()
Dim query = "SELECT * FROM PERSONAS ORDER BY Id ASC"
5 Dim cmd As New SqlCommand(query, conn)
6 Dim adap As New SqlDataAdapter(cmd)
7 adap.Fill(dt)
8 Return dt
9 End Using
End Function
10

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.

1
2 public static bool Existe(int id)
{
3 using (SqlConnection conn = new
4 SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
5 {
6 string query = "SELECT COUNT(*) FROM PERSONAS WHERE ID=@Id";
7 SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("Id", id);
8 conn.Open();
9
10 int count = Convert.ToInt32(cmd.ExecuteScalar());
11 if (count == 0)
12 return false;
else
13 return true;
14 }
15 }
16

?
1
Public Function Existe(ByVal id As Integer) As Boolean
2
Using conn As New
3 SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
4 Dim query = "SELECT COUNT(*) FROM PERSONAS WHERE ID=@Id"
5 Dim cmd As New SqlCommand(query, conn)
6 cmd.Parameters.AddWithValue("Id", id)
conn.Open()
7
8 Dim count As Integer = Convert.ToInt32(cmd.ExecuteScalar())
9 If count = 0 Then
10 Return False
11 Else
12 Return True
End If
13 End Using
14 End Function
15

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.

1 public static int RecuperarId()


2 {
3 using (SqlConnection conn = new
4 SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
{
5 string query = "SELECT MAX(Id) FROM PERSONAS";
6 SqlCommand cmd = new SqlCommand(query, conn);
7 conn.Open();
8
9 return Convert.ToInt32(cmd.ExecuteScalar());
10 }
}
11

1 Public Function RecuperarId() As Integer


Using conn As New
2 SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
3 Dim query = "SELECT MAX(Id) FROM PERSONAS"
4 Dim cmd As New SqlCommand(query, conn)
5 conn.Open()
6
7 Return Convert.ToInt32(cmd.ExecuteScalar())
End Using
8 End Function
9

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.

1
2 public static void Insert(int id, string nombre, string apellido, int edad)
3 {
4 using (SqlConnection conn = new
SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
5 {
6 string query = "INSERT INTO PERSONAS(Id,Nombre,Apellido,Edad)
7 VALUES(@Id,@Nombre,@Apellido,@Edad)";
8 id = RecuperarId() + 1;
SqlCommand cmd = new SqlCommand(query, conn);
9 cmd.Parameters.AddWithValue("Id", id);
10 cmd.Parameters.AddWithValue("Nombre", nombre);
11 cmd.Parameters.AddWithValue("Apellido", apellido);
12 cmd.Parameters.AddWithValue("Edad", edad);
13 conn.Open();
try
14 {
15 cmd.ExecuteNonQuery();
16 MessageBox.Show("Registro Ingresado con Exito...");
17 }
catch (Exception)
18
{
19 MessageBox.Show("Error no se Pudo Ingresar el Registro...");
20 }
21 }
22 }
23

1 Public Sub Insert(ByVal id As Integer, ByVal nombre As String, ByVal apellido As Stri
edad As Integer)
2
3 Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default")
4 Dim query = "INSERT INTO PERSONAS(Id,Nombre,Apellido,Edad)
5 VALUES(@Id,@Nombre,@Apellido,@Edad)"
6 id = RecuperarId() + 1
7 Dim cmd As New SqlCommand(query, conn)
cmd.Parameters.AddWithValue("Id", id)
8 cmd.Parameters.AddWithValue("Nombre", nombre)
9 cmd.Parameters.AddWithValue("Apellido", apellido)
10 cmd.Parameters.AddWithValue("Edad", edad)
11 conn.Open()
Try
12 cmd.ExecuteNonQuery()
13 MessageBox.Show("Registro Ingresado con Exito...")
14 Catch ex As Exception
15 MessageBox.Show("Error no se Pudo Ingresar el Registro...")
16 End Try
End Using
17 End Sub
18

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.

1 private void Form1_Load(object sender, EventArgs e)


2 {
3 dataGridView1.DataSource = Datos.Cargar();
}
4

1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles MyBase.Load
2 DataGridView1.DataSource = Datos.Cargar()
3 End Sub

Lo unico 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.

1
2 private void btncomprobar_Click(object sender, EventArgs e)
3 {
if (!Datos.IsNumeric(txtcomprobar.Text))
4 MessageBox.Show("Ingres un Valor Numerico...");
5 else
6 {
7 if (!Datos.Existe(Convert.ToInt32(txtcomprobar.Text)))
MessageBox.Show("Registro No Existe...");
8 else
9 MessageBox.Show("Registro Ya Existe...");
10 }
11 }
12

1 Private Sub btncomprobar_Click(ByVal sender As System.Object, ByVal e As System.Even


2 btncomprobar.Click
3 If (Not IsNumeric(txtcomprobar.Text)) Then
4 MessageBox.Show("Ingres un Valor Numerico...")
5 Else
If (Not Datos.Existe(Convert.ToInt32(txtcomprobar.Text))) Then
6 MessageBox.Show("Registro No Existe...")
7 Else
8 MessageBox.Show("Registro Ya Existe...")
9 End If
End If
10 End Sub
11

Antes de comprobar si existe el registro por medio del id comprobamos que el dato ingresado sea numerico si

lo es entonces llamamos al metodo Existe y le pasamos el valor ingresado y mostramos los respectivos

mensajes si el id ya existe o no.

Ahora en el evento del boton que usaremos para agregar un nuevo registro tendremos lo siguiente.

1 private void btnagrear_Click(object sender, EventArgs e)


{
2 if (!Datos.IsNumeric(txtid.Text) | !Datos.IsNumeric(txtedad.Text))
3 {
4 MessageBox.Show("Ingres un Valor Numerico...");
5
6 }
7 else
8 {
if (!Datos.Existe(Convert.ToInt32(txtid.Text)))
9 {
10 Datos.Insert(Convert.ToInt32(txtid.Text), txtnombre.Text, txtapellido.Te
11 Convert.ToInt32(txtedad.Text));
12 dataGridView1.DataSource = Datos.Cargar();
13 }
else
14 {
15 MessageBox.Show("Id Ya Existe...");
16 }
17 }
}
18
19

1 Private Sub btnagrear_Click(ByVal sender As System.Object, ByVal e As System.EventAr


2 btnagrear.Click
3 If (Not IsNumeric(txtid.Text) Or Not IsNumeric(txtedad.Text)) Then
MessageBox.Show("Ingres un Valor Numerico...")
4 Else
5 If (Not Datos.Existe(Convert.ToInt32(txtid.Text))) Then
6 Datos.Insert(Convert.ToInt32(txtid.Text), txtnombre.Text, txtapellido.Te
7 Convert.ToInt32(txtedad.Text))
DataGridView1.DataSource = Datos.Cargar()
8 Else
9 MessageBox.Show("Id Ya Existe...")
10 End If
11 End If
12 End Sub

Antes de ingresar hacemos 2 validaciones primero comprobamos que el los datos del id y la edad

sean numericos y tambien 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.