• Lunes 23 de Noviembre de 2020, 22:33

Autor Tema:  Consulta sobre POO en Combobox  (Leído 2583 veces)

zuma

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Consulta sobre POO en Combobox
« en: Martes 30 de Marzo de 2010, 20:15 »
0
Hola amigos del foro en mi anterior post tuve una duda referente a como cargar datos en un combobox desde una base de datos y lo logre gracias a la ayuda del amigo daniel.

Ahora estoy intentando hacer lo mismo pero con un proceso e implementacion diferente basado en la programacion orientada a objetos; resumiendo:

- Tengo un Winform que contiene 01 combobox y 01 textbox.
- tengo una clase llamada "DBcombo".
- tengo otra clase llamada "datos".
- Tengo un procedimiento almacenado llamado "sp_combo"

Hasta ahi estamos, ahora:

En la clase "DBcombo" he definido lo siguiente:

public class DBcombo
{
    public DBcombo()
    {
    }
    public SqlConnection getConexion()
    {
        try
        {
            SqlConnection con = new SqlConnection("Data Source=local;Initial Catalog=comboMAN;Integrated Security=True");
            return con;
        }
        catch (SqlException e)
        {
            Console.WriteLine("Error de SQL:" + e.ToString());
        }
        catch (Exception e)
        {
            Console.WriteLine("Error:" + e.ToString());
        }
        return null;
    }
}


En la clase "datos" he definido loa siguiente:

public class datos
{
    public datos()    
    {
    }
//Metodo que busca centro educativo "buscarce"
    public DataSet buscarce()
    {
        DBcombo basedat = new DBcombo();
        SqlConnection con = new SqlConnection();
        DataSet ds = new DataSet();
   
    try
    {
    con = basedat.getConexion();con.Open();
    SqlCommand cmd=new SqlCommand("sp_combo", con);
    cmd.CommandType=CommandType.StoredProcedure;
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(ds);
    con.Close();
    return ds;
    }
    catch (SqlException e)
        {
            Console.WriteLine("Error de SQL :" + e.Message);
        }
        catch (Exception e)
        {
            Console.WriteLine("Error :" + e.Message);
        }
        return null;
    }
}


En el Load del formulario he puesto lo siguiente:

comboBox1.DataSource = datace.buscarce().Tables[0];

El procedimiento almacenado lo pongo por hay que corregir algo, este me permite si es que no estoy equivocado cargar los registros de la tabla "centroeducativo" que contiene los campos id_ce y nombre_ce.

ALTER PROCEDURE sp_combo
   @idcen varchar(20),@nomce varchar(50)
AS
BEGIN
      SET NOCOUNT ON;

   SELECT id_ce, nombre_ce from centroeducativo where @idcen=id_ce and @nomce=nombre_ce
END


Cuando ejecuto la aplicacion no tengo errores, pero me sale el siguiente mensaje:
No se controlo NullReferenceException, esto en la linea del load (comboBox1.DataSource = datace.buscarce().Tables[0];), a que se debe esta excepcion enque estoy fallando por favor amigo daniel si llees el mensaje te pido me des una manito.

Hasta pronto.

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Consulta sobre POO en Combobox
« Respuesta #1 en: Martes 30 de Marzo de 2010, 21:06 »
0
Hola, NullReferenceException te da cuando no inicializas un puntero a un objeto.
estas seguro inicializas "datace"?

Cuando le pasas los parametros al procedimiento almacenado?

Saludos, Daniel.

zuma

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Consulta sobre POO en Combobox
« Respuesta #2 en: Miércoles 31 de Marzo de 2010, 17:03 »
0
Estimado daniel..como veras en la clase "datos" el metodo "buscarce" embebe tanto a la clase Connection como al procedimiento almacenado "sp_combo", respecto de si incialice "datace" claro que si como puedes ver en el siguiente segmento de codigo:

public partial class Form1 : Form
    {
        //instanciamos datace
        datos datace = new datos();
       
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.DataSource = datace.buscarce().Tables[0];
        }

La pregunta tuya amigo daniel de "cuando le paso los parametros al SP?", no me queda claro..pero te puedo decir es que, si te refieres al SqlParameter, en este caso no necesito por cuanto estoy jalando simplemente datos de una tabla, si se trata de donde o cuantos son los parametros pasados al SP son 02 como puedes ver al principio del post anterior. haber que se puede hacer esttimado daniel ayudame.

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Consulta sobre POO en Combobox
« Respuesta #3 en: Miércoles 31 de Marzo de 2010, 20:42 »
0
El procedimiento almacenado espera dos parametros "@idcen varchar(20),@nomce varchar(50)" y con esos parametros filtra las filas de la tabla centroeducativo si no me equivoco.

Cuando le pasas esos parametros en tu codigo al procedimiento almacenado?
Deberias hacer algo por el estilo:
cmd.Parameters.AddWithValue("@idcen", valor);
cmd.Parameters.AddWithValue("@nomce", valor);

Me tome la molestia de probar tu codigo y ese fue el unico error que me dio tu codigo(el error de los parametros). El nullreferenceexception no me aparecio.

Saludos, Daniel.

zuma

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Consulta sobre POO en Combobox
« Respuesta #4 en: Lunes 5 de Abril de 2010, 16:41 »
0
Estimado daniel he probado con pasar los parametros del procedimiento almacenado que me quedo asi:

public DataSet buscarce(string vidce, string vnomce)
    {
        DBcombo basedat = new DBcombo();
        SqlConnection con = new SqlConnection();
        DataSet ds = new DataSet();
        SqlParameter param;
   
    try
    {
    con = basedat.getConexion();con.Open();
    SqlCommand cmd=new SqlCommand("sp_combox", con);
    param = cmd.Parameters.Add("@idce", SqlDbType.VarChar);
    param.Value=vidce;
    param = cmd.Parameters.Add("@nomce", SqlDbType.VarChar);
    param.Value = vnomce;
    cmd.CommandType=CommandType.StoredProcedure;
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(ds);
    con.Close();
    return ds;
    }

Pero me sigue saliendo el mismo error del NullReferenceException, pero ahora apunta a la linea Application.Run(new Form1()); del MAIN, necesito que me despejes esta duda amigo daniel, no se si estoy fallando en la definicion del procedimiento almacenado aunque no creo que sea eso por que ya me lo hubieras observado. Ademas en LOAD del formulario en la parte sobreada de esta linea de codigo comboBox1.DataSource = datace.buscarce().Tables[0]; me dice ninguna sobrecarga para el metodo buscarce acepta '0' argumentos. Espero me contestes amigo daniel saludos.

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Consulta sobre POO en Combobox
« Respuesta #5 en: Lunes 5 de Abril de 2010, 21:26 »
0
Bueno . . . me parece no estas pensando lo que escribes... y pretendes q el foro te entrege un codigo q haga todo...
O simplemente nos estas tomando el pelo...

Primero:
Creas un SqlParameter lo asignas pero nunca lo agregas al SqlCommand.
Usa SqlCommand.Parameters.Add...

Segundo:
 
Citar
ninguna sobrecarga para el metodo buscarce acepta '0' argumentos
Obvio porque acabas de cambiarlo a
Citar
public DataSet buscarce(string vidce, string vnomce)

La llamada al procedimiento esta bien.

Tomate tiempo y lee el codigo con calma pensando q es lo q dice.
Saludos, Daniel.

zuma

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Consulta sobre POO en Combobox
« Respuesta #6 en: Martes 6 de Abril de 2010, 22:05 »
0
Bueno amigo daniel, la verdad no fue esa la impresion que yo quise dar, el de tomarles el pelo creo que es una opinion de parte tuya bastante instrascendente, las consultas que yo hago a travez de este foro es para aprender no para perder el tiempo intentando tomar el pelo a nadie mucho menos que me hagan el trabajo sin mi propio esfuerzo.
Pero bueno yendo ya al tema central ya logre lo que staba tratando de realizar con mi codigo con un sin numero de prueba y error prueba y error ...., y funciono solo era cuestion de definir bien el procedimiento almacenado considerando que mi tabla al cual hacia referencia para la conexion tiene 02 campos no era necesario pasarle parametros quedando el metodo o procedimiento de la forma siguiente el cual comparto sin reparo alguno:

public DataSet buscarce()
    {
        DBcombo basedat = new DBcombo();
        SqlConnection con = new SqlConnection();
        DataSet ds = new DataSet();
        try
    {
    con = basedat.getConexion();
    con.Open();
    SqlCommand cmd=new SqlCommand("sp_combox", con);
    cmd.CommandType=CommandType.StoredProcedure;
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(ds);
    con.Close();
    return ds;
    }
 Ya en el load hago la llamada a este metodo que finalmente me permite mostrarlo en el formulario. Gracias por la ayuda daniel espero seguir contando contigo en bien de aprender mas y mas.