domingo, 10 de junio de 2012

Guardar Datos de Consulta a una BD en Variables

A petición de un usuario de Codemania que por cierto aprovecho para hacerles una invitación a que se registren y dejen sus dudas o compartan códigos.

El articulo trata sobre como guardar los datos de una consulta a una bd en variables para luego poder hacer validaciones con los datos obtenidos.

El articulo lo explico en C# pero al final pueden descargar el proyecto en C# y VB.NET

La base de datos que usare para este ejemplo se llama Personas y cuenta con una tabla Persona y con los campos id, nombre, apellido y edad.

Tabla

El ejemplo consistirá en introducir un nombre y si el registro se encuentra en la bd guardare el apellido y edad en 2 variables y luego comparare si la persona es mayor de edad o no lo es.

Bueno empecemos lo primero sera agregar una clase a nuestro proyecto que le llamaremos Datos.cs y tendrá el siguiente código.
public static class Datos
{
public static DataTable Buscar(string nombre)
{
DataTable dt = new DataTable();

SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString());//cadena conexion

string consulta = "SELECT id,apellido,edad FROM PERSONA WHERE nombre=@nombre"; //consulta

SqlCommand comando = new SqlCommand(consulta, conexion);
comando.Parameters.AddWithValue("@nombre",nombre);
SqlDataAdapter adap = new SqlDataAdapter(comando);
adap.Fill(dt);

return dt;
}

}

Linea 3 Creamos un método de tipo DataTable llamado Buscar que recibirá un parámetro que sera el dato a buscar en la bd.
Linea 9 Creamos una consulta para obtener los datos de la tabla en este caso apellido y edad.
Linea 12 Enviamos el parámetro en base al cual obtendremos los datos de la tabla.

Importante en el código de la clase anterior agregar los siguientes espacios de nombres.
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Windows.Forms;


En nuestro formulario tendremos el siguiente diseño.

Diseño

Y el código que tendremos en el evento click de nuestro botón sera el siguiente.
//variables para guardar los datos de la bd
int edad;
string apellido;

private void btnbuscar_Click(object sender, EventArgs e)
{

DataTable dt = Datos.Buscar(textBox1.Text);//envio dato a buscar
//si encuentra el dato guardo los datos en las variables
if (dt.Rows.Count > 0)
{
DataRow row = dt.Rows[0];
//guardo datos en variables
apellido = Convert.ToString(row["apellido"]);
edad = Convert.ToInt32(row["edad"]);

if(edad>=18)//valido si es mayor de edad
MessageBox.Show(textBox1.Text+" "+ " "+apellido+" "+"Es Mayor de Edad" ,"Registro");
else
MessageBox.Show(textBox1.Text + " " + " " + apellido + " " + "Es Menor de Edad", "Registro");
}
else
MessageBox.Show("No Existe","Registro");
}

Linea 2 y 3 Declaramos las 2 variables donde guardaremos los datos de nuestra consulta.
Linea 8 Llamamos nuestro método Buscar y le pasamos el parámetro del dato que queremos buscar.
Linea 14 y 15 Guardo los datos de la consulta en las varariables
Linea 17 y 18 Valido si la edad es mayor que 18 e imprimo los datos.
Linea 19 y 20 No es mayor de edad imprimo los datos.

Eso seria todo captura de la aplicación corriendo.

Captura


21 comentarios:

  1. Cristian:
    Muy bueno tu blog.. y gracias por el trabajo que te tomas para explicar estas cosas..
    Yo solo soy un aficionado que cada vez le encuentra mayor gusto a programar (en realidad soy entrenador de Ajedrez en Peru)
    Tengo una duda (de varias): ¿Como haces para cargar una base de datos a la aplicacion?
    Es decir si deseo llevar mi aplicacion en vb a otra pc (ambas tienen instaladas sql server) ¿cómo hago para que la aplicacion se lleve consigo la base de datos?
    Tengo la aplicacion trabajandola en mi casa pero deseo llevarlo a mi centro de labores para seguir avanzando con él...

    Gracias desde Peru..
    Mi blog es
    http://ajedrezsag.blogspot.com/
    y mi correo:
    carjavurlo@hotmail.com

    ResponderEliminar
    Respuestas
    1. Hola saludos.

      Dices que ambas pc tienen instalado sql server pues lo único que deberías hacer es copiar la base de datos en una usb te la llevas a la otra pc y la adjuntas al sql server.

      Adjuntar base de datos en sql server

      Eliminar
  2. ¿Y la aplicacion automaticamente encontrará en la segunda PC a la base de datos?
    Parece simple...

    ResponderEliminar
    Respuestas
    1. Si lo único que tendrías que cambiar en tu cadena de conexión es el nombre del servidor aunque no creo que sea necesario ya que si en los 2 tienes el mismo sql server con un punto indicarias el servidor de manera local Data Source=.

      Eliminar
    2. En una PC (en la que esta la aplicacion VB) tengo SQL Server 2008 Studio R2. Y en la otra tengo SQL Server 2008 Express...
      ¿hago la operacion con Data Source=.? ¿Ó tengo que hacerlo diferente?

      Gracias Cristian y disculpa las molestias...

      Eliminar
    3. Entonces seria así Data Source=.\SQLEXPRESS

      Eliminar
  3. Cristian:
    Ante todo mil disculpas por quizas importunarte por esta nueva consulta..

    Diseñé un procedimiento en SQL SERVER 2008 sencillo para insertar datos. El procedimiento genera la Clave Primaria de una tabla (es decir yo no ingreso los datos en la columna que servira como clave primaria, el procedimiento lo creará)
    Ejecuto el procedimiento en el entorno SQL SERVER y no tengo ningun problema....

    El problema ocurre cuando corro la aplicacion en VB (Visual Studio 2008) en el form Ajedrecistas que ejecuta el Procedimiento SQL mencionado..

    No se que pasa...

    Mucho te agradeceria si pudieras ayudarme en esta consulta...

    Dejo en el enlace SkyDrive (archivo Word) las imagenes que serviran mejor para sustentar el problema...

    https://skydrive.live.com/?cid=eb4b0f99ab737605#!/view.aspx?cid=EB4B0F99AB737605&resid=EB4B0F99AB737605!205

    ResponderEliminar
    Respuestas
    1. Y has probado insertar mas de un registro con tu procedimiento desde el sql server para salir de la duda que no sea problema del procedimiento, viendo el error que te muestra es como que no le pasa los parametros a tu procedimiento por eso te muestra el error no ejecutes el código para limpiar los textbox y pruebalo.

      Eliminar
    2. Finalmente encontré la solucion:
      Todo el problema sucede en el entorno del VB... en SQL no habia ningun problema...
      Lo que sucedia con mi procedimiento era que primero se cargaban los registros secundarios que generarian el registro principal (columna Primary Key) y alli aparecia el error. Siempre en "IdAjedrecista" estaba el problema.

      Aqui esta pagina da la solucion:
      http://msdn.microsoft.com/es-es/library/s3bxwk8b%28v=vs.80%29.aspx

      Y acontinuacion hice exactamente lo que se indica bajo estas líneas:

      "Para suspender las restricciones de actualización mediante el Diseñador de DataSet

      Abra el conjunto de datos en el Diseñador de DataSet. Para obtener más información, vea Cómo: Abrir un objeto Dataset en el Diseñador de Dataset.

      Establezca la propiedad EnforceConstraints en false en la ventana Propiedades"

      Efectivamente en mi caso estaba en TRUE (por defecto se establece así) Realicé el cambio y ahora marcha muy bien..

      Gracias de todas formas por el interes mostrado en mi caso...

      Eliminar
    3. Que bien que resolviste tu problema

      Saludos

      Eliminar
  4. bien pibe es un buen algoritmo y funciona barbaro...

    ResponderEliminar
  5. hola que buena aportacion, me gustaria q me ayudaras con algo,
    quisiera saber como migrar datos de una base de datos a otra, cada BD tiene una tabla y se deben enviar los datos de una tabla a otra en c#

    ResponderEliminar
  6. Hola Tatiana.

    Puedes usar la Inserción multiple de filas.
    Insertar datos.

    Ahí podrás ver como consultar una tabla y el resultado insertarla en otra usando la inserción múltiple.

    Saludos.

    ResponderEliminar
  7. Muy interesante tu blog... gracias por el aporte y el tiempo que te tomaste en transmitir tus conocimientos... :)

    Vanessa de Perú

    ResponderEliminar
  8. Hola Vanessa espero mi blog te sirva en algo.

    Y mas interesante ver a una mujer interesada en esta área de programación :)

    Saludos.

    ResponderEliminar
  9. ola disculpen
    quisiera ver si me pueden ayudar, lo que pasa soy nueva en la programación estoy trabajando con C# asp.net visual studio 2010 y sql server 2005, tengo una tabla q se llama servicio en la cual tengo los siguientes datos:
    Personal....int
    equipo.....int
    estos datos los tengo en Int ya que estan relacionados con ottras tablas y en visual studio tengo un 2 Textbox y un button, en los que en los textbox ingreso datos con valor nvarchar y a la hora de guardar quiero que guarde los Id de esos datos.

    Ojala me puedan ayudar ya que es de suma importancia para mi.

    ResponderEliminar
  10. Hola.
    Pero cual seria el problema no puedes hacer el insert a la bd?

    ResponderEliminar
  11. Exactamente no puedo realizar el Insert a la Bd-- sera que me puedes ayudar es de suma importancia.

    ResponderEliminar
  12. Hola.
    Analiza el metodo Insert()de este articulo.


    Como veras en el articulo explico como hacer algunas consultas a la bd y una de ellas es como insertar registros.

    Saludos.

    ResponderEliminar
  13. http://cristiantorresalfaro.blogspot.com/2012/07/comprobar-si-existe-registro-en-bd-c.html

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.