Realizar una consulta sql desde un windows form en C#

Iniciado por nico56, 25 Diciembre 2009, 03:42 AM

0 Miembros y 2 Visitantes están viendo este tema.

nico56

Hola que tal, el objetivo de este programa que hice es muy simple, se tiene un formulario (form1) que tiene un botón que dice "ingresar nueva persona", al presionarlo aparece otro formulario (form2), con dos texBox para completar, esa información que se completa y se presiona el botón del form2 llamado "guardar y salir" o "guardar e insertar otro", queda grabado en el objeto "obj", como verán el método grabarDatos no hace nada, mi objetivo seria que esa información la meta en una tabla de una base de datos sql que justamente tenga un campo para el nombre y la edad que es lo que pide el form 2.

Este es el form 1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

class Persona
{
    string nombre;
    int edad;

    public void setNombre(string n)
    {
        nombre = n;
    }

    public void setEdad(int n)
    {
        edad = n;
    }

    public string getNombre()
    {
        return nombre;
    }

    public int getEdad()
    {
        return edad;
    }

    public void grabarDatos()
    {
         //Aca deberia meter el codigo para el "INSERT" de sql
    }

}

namespace Prueba_de_registros
{
   

    public partial class Form1 : Form
    {
       

        public Form1()
        {
           
            InitializeComponent();
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.Show();
           

        }

       

    }//Form 1

   
}


Y este es el form 2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;



namespace Prueba_de_registros
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        /*Boton guardar y salir*/
        private void button1_Click(object sender, EventArgs e)
        {
            Persona obj = new Persona();
            obj.setNombre(textBox1.Text);
            obj.setEdad(Convert.ToInt32(maskedTextBox1.Text));
            obj.grabarDatos();
            Close(); //Cierra el formulario
           
        }

        /*Boton guardar y continuar*/
        private void button3_Click(object sender, EventArgs e)
        {
            Persona obj = new Persona();
            obj.setNombre(textBox1.Text);
            obj.setEdad(Convert.ToInt32(maskedTextBox1.Text));
            obj.grabarDatos();
            textBox1.Clear();
            maskedTextBox1.Clear();
        }

        /*Boton salir*/
        private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}

mayofunk

#1
Hola, para trabajar con una base de datos tienes que :
Primero, lograr la conexion.
Segundo, ejecutar la consulta.
(Tercero, opcional), leer los resultados (si haces un select por ejemplo).

Actualmente estoy trabajando sobre un dispositivo de windows mobile y aunq no creo que sea igual, tengo esto:

class SqlConnectorToBDD
   {
       private static SqlCeConnection conn;
       private static SqlCeCommand cmd;
       private static string fileFTPName = "archivoDeBdd.sdf";
       private static string pass = "contraseña";

       private static void initConnection()
       {
           if (conn == null)
           {
               conn = new SqlCeConnection("Data Source =" + fileFTPName + "; Password ='"+pass+"'; Encrypt = TRUE;");
               try
               {
                   conn.Open();
                   cmd = conn.CreateCommand();
                   cmd.ExecuteResultSet(ResultSetOptions.Scrollable);

               }
               catch (Exception e)
               {
                   // System.out.println("Error acceso a Base de Datos.");
               }
           }
       }
       
       public static void closeConnection()
       {
           try
           {
               conn.Close();
               conn = null;
           }
           catch(Exception e)
           {
           
           }
       }

       public static SqlCeDataReader ejecuteSelect(string sel)
       {
           // Inicio conexion por si esta no esta ya iniciada.
           SqlConnectorToBDD.initConnection();
           if (cmd == null)
           {
               // NO se logro la conexion a la BDD, error !
               throw (new Exception("BDD-Conection Ex"));
           }

           //cmd.CommandText = "SELECT * from Table";
           cmd.CommandText = sel;
           SqlCeDataReader dr = cmd.ExecuteReader();

           return dr;
           
       }

       public static void ejecuteInsertUpdate(string ins)
       {
           // Inicio conexion por si esta no esta ya iniciada.
           SqlConnectorToBDD.initConnection();

           cmd.CommandText = ins;
           cmd.ExecuteNonQuery();

       }

   }


De manera que desde otras clases llamo a mis comandos asi:

Ejemplo Select:

           List<Hashtable> allElementInfos = new List<Hashtable>();
           String consultaSt = "SELECT idBrand,name FROM Brand";
           SqlCeDataReader sqle = SqlConnectorToBDD.ejecuteSelect("consultaSt");

           while (sqle.Read())
           {
               Hashtable dataCodeName = new Hashtable();
               dataCodeName.Add("idBrand", sqle.GetValue(0).ToString());
               dataCodeName.Add("name", sqle.GetValue(1).ToString());
               allElementInfos.Add(dataCodeName);
           }


Y un insert, deberia ser algo asi:

           String consultaSt = "UPDATE ..........";
           SqlCeDataReader sqle = SqlConnectorToBDD.ejecuteInsertUpdate("consultaSt");


Ahora, tienes que principalmente ver como se logra en el caso de usar un servido y no un archivo como lo estoy haciendo yo actualmente,, es decir  debes saber como se usa "SqlCeConnection" en el caso de un pc y no una palm como es mi caso.

Si das con la respuesta ponla por acá, el proximo paso en lo que estoy desarrollando será una parte servidor con una base de datos en un equipo normal (ie; un servidor y no un archivo en un dispositivo mobil).

Si es que estoy completamente equivocado tb hazlo saber, asi aprendemos todos, la verdad es que no llevo mucho tiempo en esto del .net !

Salu2.
-----------------
Edit; le saque las etiquetas de negrita a los bloque Code, pk no se ven :P

Shell Root

Como dice mayofunk, necesitas de una conexión a SQLServerClient

Agregar Libreria:
using System.Data.SqlClient;

Variables:
    SqlConnection cnn = new SqlConnection("Data Source=SHELLROOT\\SHELLROOT;Initial Catalog=Base_de_Datos;Integrated Security=SSPI;");
    SqlCommand cmd = new SqlCommand();
    SqlDataReader dr = default(SqlDataReader);


Función Conexión:

public string Conexion()
{
    try {
        cnn.Open();
    }
    catch (Exception ex) {
        return "Error en la conexión";
    }
}


Función Inseción:
public string AgregarPersona(string strNombre, string strEdad)
{
    Conexion();
    cmd = new SqlCommand("INSERT INTO TblPersona (Nombre, Edad) VALUES ('" + strNombre + "', ''" + strEdad + ")", cnn);
    cmd.ExecuteNonQuery();
    cnn.Close();
}


Saludos!
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.