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

Procedimiento almacenado parametrizados de mysql en vb.net

Estas en el tema de Procedimiento almacenado parametrizados de mysql en vb.net en el foro de .NET en Foros del Web. Saludos a todos!! En ests momentos estoy empezando a realizar una aplicacion usando como BD mysql y como interfaz VB.net y mi problema es el ...
  #1 (permalink)  
Antiguo 24/08/2010, 18:29
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Procedimiento almacenado parametrizados de mysql en vb.net

Saludos a todos!! En ests momentos estoy empezando a realizar una aplicacion usando como BD mysql y como interfaz VB.net y mi problema es el siguiente:

Tengo este procedimiento almacenado:
DELIMITER $$

USE `inventario`$$

DROP PROCEDURE IF EXISTS `id_usuario`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `id_usuario`(
IN spusuario VARCHAR(20),
IN spclave VARCHAR(20))
BEGIN
SELECT id_usuario FROM usuarios WHERE usuario = spusuario AND clave = spclave;
END$$

DELIMITER ;

Ahora por medio de un boton quiero llamar el resultado de esta consulta la cual me sirve para saber que usuarios tengo agregados en mi BD. Acontinuacion mi codigo en VB.net:

Private Sub btnlogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnlogin.Click
Dim csb As New MySqlConnectionStringBuilder

With csb
.Server = "localhost"
.Database = "inventario"
.UserID = "root"
.Password = "abc123A"

End With

Using con As New MySqlConnection(csb.ConnectionString)
con.Open()


Dim cmd2 As New MySqlCommand("call id_usuario", con)
With cmd2
.Parameters.Add("spusuario", MySqlDbType.VarChar).Value = Me.txtUsuario.Text
.Parameters.Add("spclave", MySqlDbType.VarChar).Value = Me.txtClave.Text


End With

Dim i As Integer
i = CInt(cmd2.ExecuteScalar()) EL Visual studio me señala que hay un error en esta parte del codigo
If i > 0 Then
contador = 0
MsgBox("Bienvenido", MsgBoxStyle.Information)
Exit Sub
Else
contador = contador + 1
MsgBox("Verifique su usuario y contraseña", MsgBoxStyle.Exclamation)
End If
If contador = 3 Then
MsgBox("Ha intendado ingresar mas de tres veces", MsgBoxStyle.Critical)
con.Dispose()
con.Close()
Application.Exit()
End If
End Using
End Sub

Y Visual studio me manda el siguiente error:
Incorrect number of argument for PROCEDURE inventario.id_usuario; expected 2, got 0

Como hago para darles los parametros al procedimiento. Con el resultado de la consulta obtengo el id del usuario el cual es un entero y si este existe es porque lo tengo en la BD sino que me mande un mensaje el cual manda a verificar que escriba bien los datos.

HELP ME PLEASE!!! y gracias de ante mano por leer mi problema!!
  #2 (permalink)  
Antiguo 24/08/2010, 19: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: Procedimiento almacenado parametrizados de mysql en vb.net

Código vb.net:
Ver original
  1. .Parameters.Add("?spusuario", Me.txtUsuario.Text).Direction = ParameterDirection.Input
  2. .Parameters.Add("?spclave", Me.txtClave.Text).Direction = ParameterDirection.Input
1) Debe ir "?" o "@" como prefijo del nombre del parámetro. La diferencia será si es .Net 1.1 o 2.0.
2) Debes indicar la direccion del parámetro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/08/2010, 08:39
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Procedimiento almacenado parametrizados de mysql en vb.net

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código vb.net:
Ver original
  1. .Parameters.Add("?spusuario", Me.txtUsuario.Text).Direction = ParameterDirection.Input
  2. .Parameters.Add("?spclave", Me.txtClave.Text).Direction = ParameterDirection.Input
1) Debe ir "?" o "@" como prefijo del nombre del parámetro. La diferencia será si es .Net 1.1 o 2.0.
2) Debes indicar la direccion del parámetro.
Gracias por tu respuesta!! Probe ese codigp pero me manda error!! Acontinuacion de pongo como puse ese codigo:

Código vb.net:
Ver original
  1. Dim csb As New MySqlConnectionStringBuilder
  2.  
  3.         With csb
  4.             .Server = "localhost"
  5.             .Database = "inventario"
  6.             .UserID = "root"
  7.             .Password = "abc123A"
  8.  
  9.         End With
  10.  
  11.         Using con As New MySqlConnection(csb.ConnectionString)
  12.             con.Open()
  13.             Dim cmd2 As New MySqlCommand("call id_usuario", con)
  14.             With cmd2
  15.                 .Parameters.Add("@spusuario", Me.txtUsuario.Text).Direction = ParameterDirection.Input
  16.                 .Parameters.Add("@spclave", Me.txtClave.Text).Direction = ParameterDirection.Input
  17.  
  18.             End With
  19.  
  20.             Dim i As Integer
  21.             i = CInt(cmd2.ExecuteScalar())
  22.             If i > 0 Then
  23.                 contador = 0
  24.                 MsgBox("Bienvenido", MsgBoxStyle.Information)
  25.                 Exit Sub
  26.             Else
  27.                 contador = contador + 1
  28.                 MsgBox("Verifique su usuario y contraseña", MsgBoxStyle.Exclamation)
  29.             End If
  30.             If contador = 3 Then
  31.                 MsgBox("Ha intendado ingresar mas de tres veces", MsgBoxStyle.Critical)
  32.                 con.Dispose()
  33.                 con.Close()
  34.                 Application.Exit()
  35.             End If
  36.         End Using
  37.     End Sub

Y los errores que me manda son advertencias:
Código Advertencias de VB:
Ver original
  1. Advertencia 1   'Public Function Add(parameterName As String, value As Object) As MySql.Data.MySqlClient.MySqlParameter' está obsoleto: 'Add(String parameterName, Object value) has been deprecated.  Use AddWithValue(String parameterName, Object value)'   D:\Erick\Proyectos Visual Studio\Inventario -mysql\Inventario\Inventario\Form1.vb   34  17  Inventario
  2.  
  3.  
  4. Advertencia 2   'Public Function Add(parameterName As String, value As Object) As MySql.Data.MySqlClient.MySqlParameter' está obsoleto: 'Add(String parameterName, Object value) has been deprecated.  Use AddWithValue(String parameterName, Object value)'   D:\Erick\Proyectos Visual Studio\Inventario -mysql\Inventario\Inventario\Form1.vb   35  17  Inventario

Ocupe el Addwithvalue pero igual me manda error!! Acontinuacion de muestro el codigo con addwithvalue:


Código vb.net:
Ver original
  1. .Parameters.AddWithValue("@spusuario", Me.txtUsuario.Text).Direction = ParameterDirection.Input
  2. .Parameters.AddWithValue("@spclave", Me.txtClave.Text).Direction = ParameterDirection.Input
y el error arrojado por visual studio (ME sombrea en amarillo la parte de este codigo: i = Cint(cmd.ExecuteScalar)

Código mensaje error:
Ver original
  1. Incorrect number of arguments for PROCEDURE inventario.id_usuario; expected 2, got 0

De ante mano gracias por tu respuesta!!

Última edición por The_Clansman; 25/08/2010 a las 08:59
  #4 (permalink)  
Antiguo 25/08/2010, 09:10
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: Procedimiento almacenado parametrizados de mysql en vb.net

Vamos por partes:
- ¿Version de Visual Studio?
- ¿Version de .Net?
- ¿Versión de MySQL Connector.Net?
- ¿Version de MySQL Server?
__________________
¿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 25/08/2010, 10:53
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Procedimiento almacenado parametrizados de mysql en vb.net

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Vamos por partes:
- ¿Version de Visual Studio?
Visual Studio 2005

Cita:
- ¿Version de .Net?
Bueno .net 2.0 (creo que con ese trabaja Visual Studio 2005) instalado los Netframework 2.0 ; 2.0 SP1 ; 3.0 SP1; 3.5


Cita:
- ¿Versión de MySQL Connector.Net?
MySQLConector Net 6.2.3

Cita:
- ¿Version de MySQL Server?
MySQL 5.1.49 - Comunity

De ante mano gracias por leer mi problema!! SALUDOS!!
  #6 (permalink)  
Antiguo 25/08/2010, 11:41
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: Procedimiento almacenado parametrizados de mysql en vb.net

Lo mejor es ir a las fuentes:
MySQL :: 21.2.5.6. Accessing Stored Procedures with Connector/NET

Allí tienes un ejemplo bien clarito...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 25/08/2010, 17:47
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Procedimiento almacenado parametrizados de mysql en vb.net

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Lo mejor es ir a las fuentes:
[URL="http://dev.mysql.com/doc/refman/5.1/en/connector-net-programming-stored.html"]MySQL :: 21.2.5.6. Accessing Stored Procedures with Connector/NET[/URL]

Allí tienes un ejemplo bien clarito...
Gracias por el enlace gnzsoloyo!!! Ya encontre la solucion!! y estaba cerca de ella jejejeje!! Gracias Kuan!! (el brother que me ayudo) Acontinuacion pongo el codigo para que no sufran asi como yo sufri! jejeje

Código vb.net:
Ver original
  1. Private Sub btnlogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnlogin.Click
  2.         Dim csb As New MySqlConnectionStringBuilder
  3.  
  4.         With csb
  5.             .Server = "localhost"
  6.             .Database = "inventario"
  7.             .UserID = "root"
  8.             .Password = "abc123A"
  9.  
  10.         End With
  11.  
  12.         Using con As New MySqlConnection(csb.ConnectionString)
  13.             con.Open()
  14.  
  15.             Dim cmd2 As New MySqlCommand("call id_usuario('" & Me.txtUsuario.Text & "','" & txtClave.Text & "')", con)   ' Esto me hacia falta!! y no se porque no podia ingresar bien los parametros. Tratare de averiguar el porque pero asi funciona bien!!
  16.  
  17.             Dim i As Integer
  18.             i = CInt(cmd2.ExecuteScalar())
  19.             If i > 0 Then
  20.                 contador = 0
  21.                 MsgBox("Bienvenido", MsgBoxStyle.Information)
  22.                 Exit Sub
  23.             Else
  24.                 contador = contador + 1
  25.                 MsgBox("Verifique su usuario y contraseña", MsgBoxStyle.Exclamation)
  26.             End If
  27.             If contador = 3 Then
  28.                 MsgBox("Ha intendado ingresar mas de tres veces", MsgBoxStyle.Critical)
  29.                 con.Dispose()
  30.                 con.Close()
  31.                 Application.Exit()
  32.             End If
  33.         End Using
  34.     End Sub

Mil gracias gnzsoloyo por haber leido mi problema y ayudarme!! Gracias!! El enlace esta interesante, ya lo lei y hay muchas cosas para trabajar con los procedimientos almacenados!! GRACIAS de nuevo!! Espero contar con tu ayuda mas adelante porque aqui donde me ves soy nuevo en .Net y solo se cositas. De nuevo GRACIAS y Gracias a ti Kuan!! ya estaba a punto de tirar la toallay ocupar la consulta (la consulta select dentro del command) en vez del procedimiento.

Cuando termine mi proyecto personal lo subire para que lo prueben!! esperare con ancias sus comentarios!!

Un saludo desde Nicaragua!!

Etiquetas: mysql, procedimiento, almacenar
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 16:21.