none
Instrucción insert no guarda datos en la tabla de mis base de datos RRS feed

  • Pregunta


  • Buenos dias o tardes

    tengo el código que pongo abajo para meter los datos en mi tabla de usuarios. Me lo depura y todo parece funcionar correctamente. Incluso mientras está funcionanando la aplicación los nuevos datos introducidos son visibles si hago select para mostrarlos, pero cierro y los datos no se han introducido en la tabla. Da la sensación de que se cree alguna tabla paralela y trabaje con ella en vez de con la de mi BD, ¿Alguien sabe a que puede ser debido y como e puede solucionar?

    private void BtnAnyadir_Click(object sender, EventArgs e)
            {
                SqlConnection objConexion = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BBDDAlmacen.mdf;Integrated Security=True;User Instance=True");
                objConexion.Open();
             
                try
                {

                    if ((TxtNombre.Text == "") || (TxtPass.Text == ""))
                    {
                        MessageBox.Show("Alguno de los campos está vacío", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {

                        SqlCommand miComando = new SqlCommand("INSERT INTO usuarios(usuario,password,rol) Values(@nombre, @pass, @rol) ", objConexion);
                        miComando.Parameters.Add("@nombre", System.Data.SqlDbType.VarChar);
                        miComando.Parameters["@nombre"].Value = TxtNombre.Text;
                        miComando.Parameters.Add("@pass", System.Data.SqlDbType.VarChar);
                        miComando.Parameters["@pass"].Value = TxtPass.Text;
                        miComando.Parameters.Add("@rol", System.Data.SqlDbType.VarChar);
                        miComando.Parameters["@rol"].Value = CBRol.SelectedItem.ToString();
                        miComando.ExecuteNonQuery();
                        miComando.Dispose();


                        MessageBox.Show("Usuario añadido correctamente.", "Operacion realizada con exito", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch (Exception)
                {
                 
                    MessageBox.Show("Datos ya existentes o incorrectos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                   
                }
              
                objConexion.Close();
                objConexion.Dispose();

    Gracias de antemano, saludos, Yoiyo
    jueves, 8 de mayo de 2008 19:31

Respuestas

  • A mi hace tiempo me pasó lo mismo, cuando usaba el asistente para configurar un dataset me preguntaba si deseaba adjuntar la base de datos en el proyecto y yo le decía que sí o también cuando creaba la base de datos desde visual studio me la guardaba en el mismo proyecto y sorpresa, tampoco me guardaba los datos (como a tí).

     

    Ahi bagando por el foro de visual basic (aquí mismo) me encontré una respuesta que daba el guille, según lo que entendí, cuando haces lo que yo hacía, se te crea una copia de la bd en la carpeta bin de tu proyecto y esa es la que se modifica, cuando  realmente tu cadena de conexion hace referencia no a la copia sino a la original que se te adjunto al proyecto.

     

    Bueno, sin tanto rollo, según por tu cadena de conexion

    Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BBDDAlmacen.mdf;Integrated Security=True;User Instance=True

     

    me doy cuenta que tienes la base de datos en el proyecto por eso te ha de pasar eso, lo que yo hice y sigo haciendo, es que las bases de datos que creo las guardo por ejemplo en c:\databases y nunca las adjunto al proyecto y vas a ver que todo va a funcionar de maravilla.

     

    Mucho bla bla bla y no se si me expliqué bien, ahi me avisas si te funciono o si no me dí a entender bien.

     

    Saludos.

    viernes, 9 de mayo de 2008 4:19

Todas las respuestas

  • A mi hace tiempo me pasó lo mismo, cuando usaba el asistente para configurar un dataset me preguntaba si deseaba adjuntar la base de datos en el proyecto y yo le decía que sí o también cuando creaba la base de datos desde visual studio me la guardaba en el mismo proyecto y sorpresa, tampoco me guardaba los datos (como a tí).

     

    Ahi bagando por el foro de visual basic (aquí mismo) me encontré una respuesta que daba el guille, según lo que entendí, cuando haces lo que yo hacía, se te crea una copia de la bd en la carpeta bin de tu proyecto y esa es la que se modifica, cuando  realmente tu cadena de conexion hace referencia no a la copia sino a la original que se te adjunto al proyecto.

     

    Bueno, sin tanto rollo, según por tu cadena de conexion

    Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BBDDAlmacen.mdf;Integrated Security=True;User Instance=True

     

    me doy cuenta que tienes la base de datos en el proyecto por eso te ha de pasar eso, lo que yo hice y sigo haciendo, es que las bases de datos que creo las guardo por ejemplo en c:\databases y nunca las adjunto al proyecto y vas a ver que todo va a funcionar de maravilla.

     

    Mucho bla bla bla y no se si me expliqué bien, ahi me avisas si te funciono o si no me dí a entender bien.

     

    Saludos.

    viernes, 9 de mayo de 2008 4:19
  • Mucas gracias por tu respuesta, me da la senscaion de qe esa es la solucion,  epro ahora se  me plantea otro problemilla.

    He trasladado la base de datos a c:\bd y he hecho la nueva conexion pero sigue intentando volcarla desde la ubicacion original a in, con el consecuente error, ¿Debo modificar algo mas?

    muchas gracias, un saludo
    viernes, 9 de mayo de 2008 6:03
  • Ya, por fin funciona, la solucón propuesta funciona perfectamente, el problema es que se me habia quedado en el proyecto algun dataset que se habia quedado tonto.

    Muchisimas gracias,

    PD: soy nuevo en el foro, no se si puedo votar tu respuesta o algo similar

    Un saludo, Yoiyo
    viernes, 9 de mayo de 2008 13:28
  •  

    Hola, me da gusto que hayas solucionado tu problema.

    Lo único que debes hacer cuando han resuelto alguna duda es marcar la pregunta como respondida (para que aparezca la palomita y no el signo de interrogación).

     

    Saludos y hasta luego.

    domingo, 11 de mayo de 2008 19:56
  •  Yoiyo Escribió:

    Buenos dias o tardes

    tengo el código que pongo abajo para meter los datos en mi tabla de usuarios. Me lo depura y todo parece funcionar correctamente. Incluso mientras está funcionanando la aplicación los nuevos datos introducidos son visibles si hago select para mostrarlos, pero cierro y los datos no se han introducido en la tabla. Da la sensación de que se cree alguna tabla paralela y trabaje con ella en vez de con la de mi BD, ¿Alguien sabe a que puede ser debido y como e puede solucionar?

    private void BtnAnyadir_Click(object sender, EventArgs e)
            {
                SqlConnection objConexion = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BBDDAlmacen.mdf;Integrated Security=True;User Instance=True");
                objConexion.Open();
             
                try
                {

                    if ((TxtNombre.Text == "") || (TxtPass.Text == ""))
                    {
                        MessageBox.Show("Alguno de los campos está vacío", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {

                        SqlCommand miComando = new SqlCommand("INSERT INTO usuarios(usuario,password,rol) Values(@nombre, @pass, @rol) ", objConexion);
                        miComando.Parameters.Add("@nombre", System.Data.SqlDbType.VarChar);
                        miComando.Parameters["@nombre"].Value = TxtNombre.Text;
                        miComando.Parameters.Add("@pass", System.Data.SqlDbType.VarChar);
                        miComando.Parameters["@pass"].Value = TxtPass.Text;
                        miComando.Parameters.Add("@rol", System.Data.SqlDbType.VarChar);
                        miComando.Parameters["@rol"].Value = CBRol.SelectedItem.ToString();
                        miComando.ExecuteNonQuery();
                        miComando.Dispose();


                        MessageBox.Show("Usuario añadido correctamente.", "Operacion realizada con exito", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch (Exception)
                {
                 
                    MessageBox.Show("Datos ya existentes o incorrectos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                   
                }
              
                objConexion.Close();
                objConexion.Dispose();

    Gracias de antemano, saludos, Yoiyo
    martes, 14 de octubre de 2008 7:22