Guardar Datos de Consulta a una BD en Variables

domingo, 10 de junio de 2012

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:

Carlos Javier Uría López dijo...

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

Cristian Torres dijo...

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

Carlos Javier Uría López dijo...

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

Cristian Torres dijo...

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=.

Carlos Javier Uría López dijo...

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

Cristian Torres dijo...

Entonces seria así Data Source=.\SQLEXPRESS

Carlos Javier Uría López dijo...

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

Cristian Torres dijo...

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.

Carlos Javier Uría López dijo...

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

Cristian Torres dijo...

Que bien que resolviste tu problema

Saludos

Anónimo dijo...

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

Cristian Torres dijo...

Hola.
Me alegro que te sirviera.
Saludos.

Tatiana dijo...

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#

Cristian Torres dijo...

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.

Anónimo dijo...

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

Vanessa de Perú

Cristian Torres dijo...

Hola Vanessa espero mi blog te sirva en algo.

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

Saludos.

Anónimo dijo...

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.

Cristian Torres dijo...

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

Anónimo dijo...

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

Cristian Torres dijo...

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.

Cristian Torres dijo...

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

Publicar un comentario en la entrada

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