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

Funcion para consultar una bd en mysql

Estas en el tema de Funcion para consultar una bd en mysql en el foro de .NET en Foros del Web. Hola a todos los usuarios de foros del web, por este medio quisiera pedirles su ayuda con un problema que tengo y que es el ...
  #1 (permalink)  
Antiguo 11/09/2009, 23:30
 
Fecha de Ingreso: abril-2008
Mensajes: 51
Antigüedad: 16 años, 1 mes
Puntos: 0
Funcion para consultar una bd en mysql

Hola a todos los usuarios de foros del web, por este medio quisiera pedirles su ayuda con un problema que tengo y que es el siguiente:

tengo una base de datos hecha en el hasta hoy gestor de bd libre mysql (oracle compro a mysql y solo se espera su traspaso a esa empresa, una verdadera lastima.....pero bueno este no es el tema en cuestion) , ya diseñe una aplicacion hecha en vb.net 2008 y todo iba bien, hasta que llegue al proceso de guardar, bien en si guardar si me funciona bien, al ingresar los datos en un formulario estos son bien bajados a la base de datos, el asunto es que cuando se intenta ingresar un registro que ya existe en cuanto a lo ke es su clave primaria, es aki donde da un error el sistema y abandona la aplicacion, por supuesto esto es obvio ya ke se esta tratando de generar un valor que ya existe en la bd, ahora bien lo que necesito es ke por favor me pudisen poster el codigo para poder efectuar una funcion que se llame cuando se oprima el boton guardar, es decir ke al guardar vaya y ke se ejecute esta funcion revisando en la base de datos si el registro ke se kiere ingresar ya existe o no, de existir ke devuelva un mensaje diciendole al usuario ke el registro ke intenta guardar ya existe y por tanto no puede ejecutar esa tarea........

Por la ayuda que me puedan brindar les estare muy agradecido.......
  #2 (permalink)  
Antiguo 12/09/2009, 08:24
 
Fecha de Ingreso: agosto-2007
Mensajes: 25
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Funcion para consultar una bd en mysql

Hola amigo...

en tu funcion de guardado maneja try-catch asi cachas el error y lo controlas evitando que mande un error feote y te saque del sistema

Ejemplo:

Código:
    Try
         //aqui pones todo el codigo de guardado asi como lo estas haciendo ahorita... 
    Catch ex As Exception
         //aqui es donde controlaras el error que te marque al guardar...!
        MsgBox("Error recibido:"&vbCrLf & ex.Message)
    End Try
bueno espero y te haya servido

saludos
  #3 (permalink)  
Antiguo 12/09/2009, 10:28
 
Fecha de Ingreso: abril-2008
Mensajes: 51
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Funcion para consultar una bd en mysql

hola kornneo, te cuento que si estoy manejando el try-catch, pero no me funciona, te voy a colocar mi codigo y te explico donde truena:

If txtidmes.Text = "" Or txtmes.Text = "" Then
MsgBox("Falta Información", MsgBoxStyle.Critical, "ERROR 001")
Else
Call connecttosql()
Dim actualizasql As String
actualizasql = "insert into MESES values (' " & txtidmes.Text & " ', '" & txtmes.Text & "')"
Dim comando As New MySqlCommand(actualizasql, conn)
conn.Open()
'Dim nfilasafectadas As Integer
'nfilasafectadas =
comando.ExecuteNonQuery() (es aca donde truena, y ya no ejecuta el catch que tengo bajo el try
Try
'If (nfilasafectadas <> 0) Then
'en orden no necesitamos mensaje
Dim ds As New DataSet
Dim da As New MySqlDataAdapter
Dim sql As String
sql = "Select * from MESES"
da.SelectCommand = New MySqlCommand(sql, conn)
da.Fill(ds)
conn.Close()

'con esta linea obtengo un objeto DataTable
'(dt) con los registros resultantes
Dim dt As DataTable = ds.Tables(0)

'Ahora puedo asignar el DataTable (dt) al DataGridView1
Me.dtgmeses.DataSource = dt
'-----------------------------------------------------------
'conexion.Close()


'End If
Catch ex As MySqlException (esto ya no se ejecuta
MsgBox("No se pudo insertar")
conn.Close()
End Try
cmdguardarm.Enabled = False
txtidmes.Text = ""
txtmes.Text = ""
End If

desde ya agradezco el apoyo ke me pudieses brindar
  #4 (permalink)  
Antiguo 12/09/2009, 11:21
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, 6 meses
Puntos: 2658
Respuesta: Funcion para consultar una bd en mysql

Nunca te va a funcionar si el comando.ExecuteNonQuery() no lo pones dentro del Try/Catch...
De todos modos es una función un poco tosca, porque más que controlar si falla, deberías verificar si existe antes de enviar a hacer una tarea que no podrá obtener...
Código vb.net:
Ver original
  1. Public Function InsertarRegistro(ByRef IdMes As String, ByRef TxMes As String)
  2.         Dim actualizasql As String
  3.         Dim comando As MySqlCommand
  4.     Try
  5.         connecttosql()
  6.         conn.Open()
  7.         actualizasql = "SELECT COUNT(*) FROM MESES WHERE mes_id = '" & idmes & "';"
  8.         comando = New MySqlCommand(actualizasql, conn)
  9.         If Convert.ToInt32(comando.ExecuteNonQuery)>0 Then
  10.             MessageBox.Show("El mes ingresado ya existe.", "Error de Ingreso", MessageBoxButtons.OK, MessageBoxIcon.Error)
  11.             Return False
  12.         Else
  13.             actualizasql = "INSERT INTO MESES VALUES('" & idmes & "', '" & txmes & "');"
  14.             comando = New MySqlCommand(actualizasql, conn)
  15.             comando.ExecuteNonQuery
  16.             Return True
  17.         End If
  18.     Catch ex As MySqlException
  19.         MessageBox.Show("Error de base de datos en la funcion de ingreso..", "Error de MySQL", MessageBoxButtons.OK, MessageBoxIcon.Error)
  20.         Return False
  21.     Catch ex As Exception
  22.         MessageBox.Show("Error de ejecución en la función de ingreso", "Error de aplicacion", MessageBoxButtons.OK, MessageBoxIcon.Error)
  23.         Return False
  24.     End Try
  25. End Function

Este ejemplo te muestra una forma esquematizada de cómo verificar e insertar. Estoy asumiendo que connecttosql() es una función o método que crea una conexión sin abrirla (cosa que me parece ineficiente), y luego dentro de este caso lo abres. Además estoy imaginando que hay un campo mes_id que conserva el id del mes. Si es otro el nombre o el campo, debes ponerlo allí.
Ten en cuenta que una Exception puede capturar casi cualquier excepción, pero no identificarlas por clase de objeto; en cambio una MysqlException te permite capturar la excepción si y sólo si es un error de la base. Por eso van en ese orden.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 12/09/2009, 11:57
 
Fecha de Ingreso: agosto-2007
Mensajes: 25
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Funcion para consultar una bd en mysql

buenas... pues como comenta el amigo gnzsoloyo

ta mal puesto tu "try"

el ejemplo dado es muy explicativo... cualquier otra cosa por aqui andamos...!!!

suerte

saludos...!!!
  #6 (permalink)  
Antiguo 12/09/2009, 16:52
 
Fecha de Ingreso: abril-2008
Mensajes: 51
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Funcion para consultar una bd en mysql

gracias por tu respuesta gnzsoloyo, muy ilustratativo el ejemplo, ahora bien por favor necesitaria tu ayuda para optimizar mi funcion para establecer conexion mi base de datos mysql, te coloco el codigo para que le des un vistazo:

Module conexiones

Public conn As MySqlClient.MySqlConnection (hago publica la variable conn para poder llamarla en mi formulario de vb.net 2008


Public Sub connecttosql() (creo esta funcion para no establecer una conexion por cada formulario que elabore, solo la llamo y listo
conn = New MySqlConnection
conn.ConnectionString = "SERVER=localhost;" & "DATABASE=medalla;" & "UID=root;" & "PWD=jc;"

Try
conn.Open()
' Insert code to process data.
'MessageBox.Show("Se ha conectado a la base de datos MEDALLA")
Catch ex As Exception
MessageBox.Show("Failed to connect to data source")
Finally
conn.Close()
End Try
End Sub
End Module

Desde ya te agradezco tu ayuda.....
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 07:43.