Principales respuestas
Instrucción insert no guarda datos en la tabla de mis base de datos

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