CLR: .Net / Mono / Boo / Otros CLR > C#

 LLENAR UNA ACCESS DB DESDE UN TEXTBOX

(1/2) > >>

cabromex:
BUEN@S, TARDES, NOCHES DIAS.

TENGO UN LIGERO INCONVENIENTE CON UN CODIGO EN C#. LO QUE ESTOY TRATANDO DE HACER ES LLENAR UNA BASE DE DATOS DESDE LOS TEXTBOX, NO EH PUESTO UN DATA GRID PUESTO QUE NO LO VI NECESARIO.
LA BASE DE DATOS SE LLAMA USERSPAQUETERIA
LA TABLA SE LLAMA ENVIOS
LOS CAMPOS SE LLAMAN: EMPRESA, CONTACTO, ORIGEN, DESTINO, PESO, NumBultos, Descripcion, Linea Y CotO.

EN EL CATCH ME APARECE UN ERROR EL CUAL NO ENTIENDO COMO RESOLVER ADEMAS DE QUE NO HACE LO QUE SE SUPONE DEBE HACER

  private void btn_Cotizar_Click(object sender, EventArgs e)
        {
            string Empresa = txt_Empresa.Text;
            string Contacto = txt_Contacto.Text;
            string Origen = txt_Origen.Text;
            string Destino = txt_Destino.Text;
            string Peso = txt_Peso.Text;
            string NumBultos = txt_NBultos.Text;
            string Descripcion = txt_Descripcion.Text;
            string Linea = txt_Linea.Text;
            string CotO = txt_CotO.Text;

            OleDbConnection cn = new
           OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/MEDIA/UsersPaqueteria.mdb");

            try
            {
                OleDbCommand cmd = new OleDbCommand("INSERT INTO Envios ( [Empresa], [Contacto], [Origen], [Destino], [Peso], [NumBultos]s, [Descripcion], [Linea], [CotO] VALUES  (@Empresa, @Contacto, @Origen, @Destino, @Peso, @NumBultos, @Descripcion, @Linea, @CotO)",cn);
               
               // cmd.ExecuteNonQuery();//DE AQUI BRINCA EL CODIGO

                //DataSet ds = new DataSet();
               // OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                //da.Fill(ds, "Envios");

                cmd.Parameters.Add("@Empresa", OleDbType.VarChar).Value = Empresa;
                cmd.Parameters.Add("@Contacto", OleDbType.VarChar).Value = Contacto;
                cmd.Parameters.Add("@Destino", OleDbType.VarChar).Value = Destino;
                cmd.Parameters.Add("@Peso", OleDbType.VarChar).Value = Peso;
                cmd.Parameters.Add("@NumBultos", OleDbType.VarChar).Value = NumBultos;
                cmd.Parameters.Add("@Descripcion", OleDbType.VarChar).Value = Descripcion;
                cmd.Parameters.Add("@Linea", OleDbType.VarChar).Value = Linea;
                cmd.Parameters.Add("@CotO", OleDbType.VarChar).Value = CotO;
               
                cn.Open();
                cmd.ExecuteNonQuery();
               

               
 
                MessageBox.Show("Base de Datos Actualizada");
            }

            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }

            finally
            {
                cn.Close();
            }


        }
    }
}

ProfesorX:
Hola Cabromex.

Bueno para empezar me parece que estas cometiendo un error al llamar al metodo ExecuteNonQuery() antes de crear los parametros, primero se deben crear los parametros, y luego se llama al metodo ExecuteNonQuery(), aunque veo que lo pusiste como comentario, aun asi me queda la duda si lo haces antes o despues.

Dices que te pone un error en el catch, pero no nos pones cual es el error, si no pones el error no hay manera de saber si es una excepcion de C# o una del motor de base de datos de acces, asi que publica el mensaje de error de la excepcion, aunque veo que lo mandas a la consola, y si tu aplicacion es de windows y no de consola, esta no se vera, asi que tambien te recomiendo que cambies las siguientes lineas:


--- Código: ---            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }


--- Fin del código ---

Por :


--- Código: ---            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


--- Fin del código ---

De esa manera la excepcion aparece en ventana y no la manda a la consola.

Una vez que veas que excepcion (error) manda, publica el mensaje para saber que tipo de excepion es, si de acces o de C#

Saludos :)

cabromex:
disculpen que no haya contestado ayer. la neta me eche a dormir.
ESTE ES EL CODIGO, CON ALGUNAS MODIFICACIONES. ESTA UN POCO MAS LEGIBLE
EL ERROR QUE ME MARCA ES EL SIGUIENTE:SE DETECTO OLEDBEXCEPTION No se han especificado valores para algunos de los parámetros requeridos.



 private void btn_Cotizar_Click(object sender, EventArgs e)
        {

            OleDbConnection cn = new
           OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/MEDIA/UsersPaqueteria.mdb");

            try
            {
                OleDbCommand cmd = new OleDbCommand("INSERT INTO Envios (Empresa, Contacto, Origen, Destino, Peso, NumBultos, Descripcion, Linea, CotO) VALUES  (@Empresa, @Contacto, @Origen, @Destino, @Peso, @NumBultos, @Descripcion, @Linea, @CotO)",cn);
               
               
                cmd.Parameters.AddWithValue("@Empresa",  txt_Empresa.Text);
                cmd.Parameters.AddWithValue("@Contacto", txt_Contacto.Text);
                cmd.Parameters.AddWithValue("@Destino", txt_Origen.Text);
                cmd.Parameters.AddWithValue("@Peso", txt_Peso.Text);
                cmd.Parameters.AddWithValue("@NumBultos", txt_NBultos.Text);
                cmd.Parameters.AddWithValue("@Descripcion", txt_Descripcion.Text);
                cmd.Parameters.AddWithValue("@Linea", txt_Linea.Text);
                cmd.Parameters.AddWithValue("@CotO", txt_CotO.Text);
               
                cn.Open();
                cmd.ExecuteNonQuery();
               

               
 
                MessageBox.Show("Base de Datos Actualizada");
            }

            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }

            finally
            {
                cn.Close();
            }


        }
    }
}

ProfesorX:

--- Citar ---SE DETECTO OLEDBEXCEPTION No se han especificado valores para algunos de los parámetros requeridos.

--- Fin de la cita ---

Esto es porque hay un parametro al que no le has especificado un valor, en este caso, te falta el parametro @origen, ademas, el parametro @destino esta equivocado:


--- Código: ---                    cmd.Parameters.AddWithValue("@Destino", txt_Origen.Text);

--- Fin del código ---

Agrega el parametro faltante, y corrige el parametro @destino:


--- Código: ---                    cmd.Parameters.AddWithValue("@Origen", txt_Origen.Text);
                    cmd.Parameters.AddWithValue("@Destino", txt_Destino.Text);

--- Fin del código ---

Saludos :)

cabromex:
LO VOY A HACER. YO AVISO SI SE SOLUCIONO EL PROBLEMA

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa