Foros del Web » Programación para mayores de 30 ;) » .NET »

Guardar registros

Estas en el tema de Guardar registros en el foro de .NET en Foros del Web. Que tal como estan, aqui con una consulta tengo el siguiente codigo el cual quiero guardar unos datos en un bd mysql, pero no me ...
  #1 (permalink)  
Antiguo 02/07/2011, 18:55
Avatar de eduardo2009  
Fecha de Ingreso: agosto-2009
Mensajes: 110
Antigüedad: 14 años, 8 meses
Puntos: 0
Guardar registros

Que tal como estan, aqui con una consulta tengo el siguiente codigo el cual quiero guardar unos datos en un bd mysql, pero no me guarda nada ni tampoco me marca error no se que es lo que este haciendo mal...

Código:
Private Sub Agregar1()
        Dim comMySQL As New MySqlCommand

        Try
            comMySQL.CommandText = "Insert into generales (fecha,apellidos,nombres,ocupacion,recomendado) values ('TextBox18','TextBox2', 'TextBox1', 'TextBox3', 'TextBox4',)"
            comMySQL.ExecuteNonQuery()
        Catch ex As Exception
            Return
            MessageBox.Show("Error")
        End Try

        Return
    End Sub
De antemano muchas gracias por el tiempo y la orientacion

Saludos
  #2 (permalink)  
Antiguo 03/07/2011, 06:50
Avatar de eduardo2009  
Fecha de Ingreso: agosto-2009
Mensajes: 110
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Guardar registros

Ya modifique codigo por este

Cita:
Private Sub Agregar1()
Dim cad As New MySqlConnection("Database=Pacientes;Data Source=localhost;User Id=root;Password=utan")
cad.Open()
Dim sql As String = "SELECT * FROM generales"
Dim cmd As New MySqlCommand(sql, cad)
Dim dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
'Dim comMySQL As New MySqlCommand

Try
cmd.CommandText = "Insert into generales (fecha,apellidos,nombres,ocupacion,recomendado) values (" & TextBox18.Text & "," & TextBox2.Text & "," & TextBox1.Text & "," & TextBox3.Text & "," & TextBox4.Text & ")"
cmd.ExecuteNonQuery()
Catch ex As Exception
Return
MessageBox.Show("Error")
End Try

Return
End Sub
pero sigo sin poder guardar mis datos....

gracias!!!
  #3 (permalink)  
Antiguo 03/07/2011, 07:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar registros

Por lo pronto, tienes el Return antes de MesageBox, por lo que el mensaje jamás aparecerá.
Por lo demás, si no está guardando los datos, pero si se está produciendo un error (que como te dije, jamás podrás ver), es muy posible que haya errores de tipos de dato, o formato de los mismos.
Lo que te conviene es capturar mejor el error, por ejemplo:
Código vb:
Ver original
  1. Private Sub Agregar1()
  2.   Dim cad As New MySqlConnection("Database=Pacientes;Data Source=localhost;User Id=root;Password=utan")
  3.   cad.Open()
  4.   Dim sql As String = "SELECT * FROM generales"
  5.   Dim cmd As New MySqlCommand(sql, cad)
  6.   Dim dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
  7.   'Dim comMySQL As New MySqlCommand
  8.  
  9.   Try
  10.     cmd.CommandText = "Insert into generales (fecha, apellidos, nombres, ocupacion, recomendado) values (" & TextBox18.Text & "," & TextBox2.Text & "," & TextBox1.Text & "," & TextBox3.Text & "," & TextBox4.Text & ")"
  11.     cmd.ExecuteNonQuery()
  12.   Catch ex As MysqlException
  13.     MessageBox.Show("Error:" & ex.Message)
  14.     Return
  15.   Catch ex As Exception
  16.     MessageBox.Show("Error:" & ex.Message)
  17.     Return
  18.   End Try
  19. End Sub
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 03/07/2011, 08:35
Avatar de eduardo2009  
Fecha de Ingreso: agosto-2009
Mensajes: 110
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Guardar registros

Gracias por la observacion y efectivamente me merca el siguiente error

Error:El operador '&' no esta definido para la cadena "SELECT * FROM generales WHERE id" ni para tipo 'DataRowView'

gracias por la ayuda

Saludos!!!

Última edición por eduardo2009; 03/07/2011 a las 09:09
  #5 (permalink)  
Antiguo 03/07/2011, 10:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar registros

Pues probemos:
Código vb:
Ver original
  1. Private Sub Agregar1()
  2.         Dim oStrCx As String = "Database=Pacientes;Data Source=localhost;User Id=root;Password=utan;"
  3.         Dim sql As String = "SELECT * FROM generales"
  4.         Dim oComm As String = "Insert into generales (fecha, apellidos, nombres, ocupacion, recomendado) values ('" & TextBox18.Text & "','" & TextBox2.Text & "'," & TextBox1.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "')"
  5.         Dim cad As New MySqlConnection(oStrCx)
  6.         cad.Open()
  7.         Dim cmd As New MySqlCommand(sql, cad)
  8.         Dim dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
  9.         Try
  10.             cmd = New MySqlCommand(oComm, cad)
  11.             cmd.ExecuteNonQuery()
  12.         Catch ex As MySqlException
  13.             MessageBox.Show("Error MySqlException: " & ex.Message)
  14.             Return
  15.         Catch ex As Exception
  16.             MessageBox.Show("Error Exception: " & ex.Message)
  17.             Return
  18.         End Try
  19.     End Sub
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 03/07/2011, 14:51
Avatar de eduardo2009  
Fecha de Ingreso: agosto-2009
Mensajes: 110
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Guardar registros

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Pues probemos:
Código vb:
Ver original
  1. Private Sub Agregar1()
  2.         Dim oStrCx As String = "Database=Pacientes;Data Source=localhost;User Id=root;Password=utan;"
  3.         Dim sql As String = "SELECT * FROM generales"
  4.         Dim oComm As String = "Insert into generales (fecha, apellidos, nombres, ocupacion, recomendado) values ('" & TextBox18.Text & "','" & TextBox2.Text & "'," & TextBox1.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "')"
  5.         Dim cad As New MySqlConnection(oStrCx)
  6.         cad.Open()
  7.         Dim cmd As New MySqlCommand(sql, cad)
  8.         Dim dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
  9.         Try
  10.             cmd = New MySqlCommand(oComm, cad)
  11.             cmd.ExecuteNonQuery()
  12.         Catch ex As MySqlException
  13.             MessageBox.Show("Error MySqlException: " & ex.Message)
  14.             Return
  15.         Catch ex As Exception
  16.             MessageBox.Show("Error Exception: " & ex.Message)
  17.             Return
  18.         End Try
  19.     End Sub
Ya probe le codigo, pero me marca los mismo y le doy aceptar y cuando quiero agregar un registro me marca el siguiente error

"Error MysqlExecption: There is already an open DataReader associated with this connection which must be closed first"


Gracias por el tiempo!!!!
  #7 (permalink)  
Antiguo 03/07/2011, 14:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar registros

Ese error dice que no has cerrado el MySqlDataReader, y en realidad ni siquiera lo estás usando, por lo que no se entiende para qué lo abres.

Lo que me extraña del otro mensaje es que el "&" es el nexo que permite encadenar textos, por lo que el error no se comprende bien, pero tampoco está siendo usado con un DataRowView en ese Sub.
Es posible que estemos mirando el Sub equivocado. ¿Desde qué otro Sub llega la llamada a éste, es decir, ¿qué método invoca a "Agregar1()"?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 03/07/2011, 15:08
Avatar de eduardo2009  
Fecha de Ingreso: agosto-2009
Mensajes: 110
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Guardar registros

lo llamop desde un boton

Cita:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Call Agregar1()
End Sub
  #9 (permalink)  
Antiguo 03/07/2011, 15:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar registros

¿En qué estás programando? ¿Visual Basic o Visual Basic.Net? Pregunto porque no he visto a nadie usar "Call" en muchísimo tiempo (ya no es parte de los requerimientos)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 03/07/2011 a las 15:25
  #10 (permalink)  
Antiguo 03/07/2011, 15:26
Avatar de eduardo2009  
Fecha de Ingreso: agosto-2009
Mensajes: 110
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Guardar registros

En visual basic .net y base de datos mysql

pero ya identifique el problema esta en este codigo que llamo cuando abro el formulario


Cita:
Private Sub textboxcarga1()
Try
Dim cad As New MySqlConnection("Database=Pacientes;Data Source=localhost;User Id=root;Password=utan")
cad.Open()
Dim sql As String = "SELECT * FROM generales WHERE id1 = ' " & cmbpacientes.SelectedValue & " ' "
Dim cmd As New MySqlCommand(sql, cad)
Dim dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
While dr.Read
Dim value As Object = dr.Item("nombres")
If value IsNot DBNull.Value Then TextBox1.Text = CStr(value)
value = dr.Item("apellidos")
If value IsNot DBNull.Value Then TextBox2.Text = CStr(value)
value = dr.Item("ocupacion")
If value IsNot DBNull.Value Then TextBox3.Text = CStr(value)
value = dr.Item("recomendado")
If value IsNot DBNull.Value Then TextBox4.Text = CStr(value)
End While
dr.Close()
Catch ex As MySqlException
MessageBox.Show("Error:" & ex.Message)
Return
Catch ex As Exception
MessageBox.Show("Error:" & ex.Message)
Return
End Try
End Sub
y el problema de guardar es el mismo

"Error MysqlExecption: There is already an open DataReader associated with this connection which must be closed first"

si quito estas lineas del codigo que te envio ya entra y no marca error "&"...


Cita:
MessageBox.Show("Error:" & ex.Message)
Return
Estas lineas se las agregue por el comentario que me hiciste de el codigo de guardar...
gracias por el tiempo
  #11 (permalink)  
Antiguo 03/07/2011, 15:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar registros

OK. De nada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 03/07/2011, 15:33
Avatar de eduardo2009  
Fecha de Ingreso: agosto-2009
Mensajes: 110
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Guardar registros

¿¿¿¿¿¿¿???????

mmmm creo que no me exprese bien, sigo teniendo el error al guardar y el error de "&" solo desaparece si le quito las lineas

Cita:
MessageBox.Show("Error:" & ex.Message)
Return
no se si este bien que las quite o no, pero bueno el error de guardar me sigue apareciendo

"Error MysqlExecption: There is already an open DataReader associated with this connection which must be closed first"

saludos!!!
  #13 (permalink)  
Antiguo 03/07/2011, 16:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar registros

Bueno, por un lado, siempre es mejor que indiques qué versión de Visual Studio estás usando y también qué versión del .Net, ya que hay algunas diferencias formales entre algunos de ellos.
Por ejemplo, normalmente Visual Studio 2003 admitía el uso de ciertas conversiones objeto y clase, pero a partir de VS2005, esto no sucede.
En el caso, es posible que el problema es que estás trabajando una conversión entre un Object y un String, y esa vinculación no es válida. Como eso falla, entonces sale sin cerrar el DataReader, y cuando intentas abrir otro, no puedes.
VEamos:
Código vb:
Ver original
  1. Private Sub textboxcarga1()
  2.         Try
  3.             Dim cad As New MySqlConnection("Database=Pacientes;Data Source=localhost;User Id=root;Password=utan")
  4.             cad.Open()
  5.             Dim sql As String = "SELECT * FROM generales WHERE id1 = '" & cmbpacientes.SelectedValue.ToString & "' "
  6.             Dim cmd As New MySqlCommand(sql, cad)
  7.             Dim dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
  8.             While dr.Read
  9.                 Dim value As Object = dr.Item("nombres")
  10.                 If value IsNot DBNull.Value Then TextBox1.Text = Convert.ToString(value)
  11.                 value = dr.Item("apellidos")
  12.                 If value IsNot DBNull.Value Then TextBox2.Text = Convert.ToString((value)
  13.                 value = dr.Item("ocupacion")
  14.                 If value IsNot DBNull.Value Then TextBox3.Text = Convert.ToString((value)
  15.                 value = dr.Item("recomendado")
  16.                 If value IsNot DBNull.Value Then TextBox4.Text = Convert.ToString((value)
  17.             End While
  18.             dr.Close()
  19.         Catch ex As MySqlException
  20.             MessageBox.Show("Error:" & ex.Message)
  21.             Return
  22.         Catch ex As Exception
  23.             MessageBox.Show("Error:" & ex.Message)
  24.             Return
  25.         End Try
  26.     End Sub
De todos modos, creo que el problema mayor está entre la cadena de la primera consulta y el cmbpacientes.SelectedValue, porque esa propiedad de vuelve un Object, y el "&" está definido para la clase String, no para la superior Object.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 03/07/2011, 16:56
Avatar de eduardo2009  
Fecha de Ingreso: agosto-2009
Mensajes: 110
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Guardar registros

Exactamente el problema era esta linea

Cita:
Dim sql As String = "SELECT * FROM generales WHERE id1 = ' " & cmbpacientes.SelectedValue.ToString & " ' "
Y se resolvio el problema de "&"

Por otro lado el problema de guardar sigue siendo el mismo, ocupo vb 2010 con .net 4...


saludos y gracias por el tiempo!!!!
  #15 (permalink)  
Antiguo 03/07/2011, 17:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar registros

Bien, el problema del DataReader abierto lo tendrás que revisar debuggeando. Fíjate en lo que te dije del otro método (Agregar1), porque el DataReader allí no cumple ninguna función, por lo que deberías repensar eso.
De todos modos, más allá de ese detalle, es obvio que no se está cerrando.
Verifica por qué.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 03/07/2011, 18:02
Avatar de eduardo2009  
Fecha de Ingreso: agosto-2009
Mensajes: 110
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Guardar registros

Ya cerre la conexion y la volvi abrir y ahora me sale otro error, este es el codigo

Cita:
Private Sub Agregar1()
Dim cad As New MySqlConnection("Database=Pacientes;Data Source=localhost;User Id=root;Password=utan")
cad.Open()
Dim sql As String = "SELECT * FROM generales"
Dim cmd As New MySqlCommand(sql, cad)
Dim dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
'Dim comMySQL As New MySqlCommand

Try
dr.Close()
cad.Open()
cmd.CommandText = "Insert into generales (fecha, apellidos, nombres, ocupacion, recomendado) values (" & TextBox18.Text & "," & TextBox2.Text & "," & TextBox1.Text & "," & TextBox3.Text & "," & TextBox4.Text & ")"
cmd.ExecuteNonQuery()
Catch ex As MySqlException
MessageBox.Show("Error:" & ex.Message)
Return
Catch ex As Exception
MessageBox.Show("Error:" & ex.Message)
Return
End Try
End Sub
y el error

Error: You have an error in your SQL syntax; check the manual that corresponds to you MYSQL server version for the rights syntax to use near viene la hora del reloj los datos que intriduje y por ultimo dice at line 1

alguna sugerencia!!!! gracias
  #17 (permalink)  
Antiguo 03/07/2011, 19:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar registros

Ja!
Bueno, si te fijas bien en el primer ejemplo que te dí, puedes notar que puse apóstrofes en la cadena para que cada dato esté encerrado entre ellos.
El tema es que simplemente quieres meter lo que está en el TextBox, y sin considerar que eso en una cadena de texto. Como tal, cuando armas la consulta de inserción lo que queda es cualquier cosa.
Cada dato debe tener su formato si no lo vas a manejar por parámetros, porque entonces debes ser tu quien lo defina.
Algunos detalles:
- Las cadenas de texto van entre apóstrofos ('). Siempre. No confundir con los acentos inversos (`) que se usan para otra cosa.
- Las fechas y horas deben respetar el estandar internacional: "aaaa-mm-dd hh:mm:ss". No puedes ponerlas sin segundos, ni agregarles a.m./p.m.
- Las fechas, como cadena, se deben encerrar entre apóstrofos.
- Las horas se expresan en rango de '00:00:00' a '23:59:59'. No se usa el rango 12/12.
- Los números enteros van sin apóstrofos.
- Los decimales deben expresarse con punto decimal. No sirve la coma porque la coma es separador de campos en el SQL.
- NULL no es "NULL", eso es una cadenena de texto que dice "NULL". SI vas a poner un NULL va sin apóstrofos.
- Poner TRUE o FALSE es igual. Sin apóstrofos. Pueden ser usados 1 y 0 para suplantarlos.
- Las fechas, horas y fechahoras se deben almacenar en columnas DATE, TIME o DATETIME. Jamás se usan VARCHAR. Si luego quieres obtener un formato en especial para esos datos, eso se hace en la consulta, no en el almacenamiento.
Cita:
- SI tienes dudas sobre el formato de los datos, usa parámetros en el MysqlCommand, y no generes los datos como cadenas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 03/07/2011, 19:31
Avatar de eduardo2009  
Fecha de Ingreso: agosto-2009
Mensajes: 110
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Guardar registros

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Ja!
Bueno, si te fijas bien en el primer ejemplo que te dí, puedes notar que puse apóstrofes en la cadena para que cada dato esté encerrado entre ellos.
El tema es que simplemente quieres meter lo que está en el TextBox, y sin considerar que eso en una cadena de texto. Como tal, cuando armas la consulta de inserción lo que queda es cualquier cosa.
Cada dato debe tener su formato si no lo vas a manejar por parámetros, porque entonces debes ser tu quien lo defina.
Algunos detalles:
- Las cadenas de texto van entre apóstrofos ('). Siempre. No confundir con los acentos inversos (`) que se usan para otra cosa.
- Las fechas y horas deben respetar el estandar internacional: "aaaa-mm-dd hh:mm:ss". No puedes ponerlas sin segundos, ni agregarles a.m./p.m.
- Las fechas, como cadena, se deben encerrar entre apóstrofos.
- Las horas se expresan en rango de '00:00:00' a '23:59:59'. No se usa el rango 12/12.
- Los números enteros van sin apóstrofos.
- Los decimales deben expresarse con punto decimal. No sirve la coma porque la coma es separador de campos en el SQL.
- NULL no es "NULL", eso es una cadenena de texto que dice "NULL". SI vas a poner un NULL va sin apóstrofos.
- Poner TRUE o FALSE es igual. Sin apóstrofos. Pueden ser usados 1 y 0 para suplantarlos.
- Las fechas, horas y fechahoras se deben almacenar en columnas DATE, TIME o DATETIME. Jamás se usan VARCHAR. Si luego quieres obtener un formato en especial para esos datos, eso se hace en la consulta, no en el almacenamiento.
Excelente, ya logre guardar registros por fiiiiiiiiiiiin!!!!!!

gracias por el tiempo dedicado a orientarme

Saludos ya lo que sigue por aqui estare con nuevas inquietudes

Etiquetas: visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:26.