problemas con MySQL
Publicado por Alfredo (47 intervenciones) el 01/11/2010 20:10:58
Estoy trabajando VS 2005 con MySQL, cuando acceso a datos a través de procedimientos almacenados sin parametros no hay problema, pero cuando trato de usar uno con parametros no me retorna los resultados, ya he ejecutado el procedimiento y si retorna datos. Este es mi código divido en 3 capas, a ver si logran ayudarme a ver cual es el problema.
capa de presentacion
Dim dsUsu As New DataSet
Dim BLUsuarios As New BLogicaNegocio.lnUsuarios
dsUsu = BLUsuarios.fAutenticaUsuarios(UserName, Password)
Capa de logina de negocio
Public Function fAutenticaUsuarios(ByVal codigo As String, ByVal clave As String) As DataSet
Dim ds As New DataSet
Try
ds = Me.DatosSql.TraerDataSet("PE_C_TM_USUARIOS", codigo, clave)
Catch ex As Exception
Dim mensaje As String = ex.Message
End Try
Return ds
End Function
capa de acceso a datos
Public Overloads Function TraerDataSet(ByVal procedimientoAlmacenado As String, ByVal ParamArray args As [Object]()) As DataSet
Dim mDataSet = New DataSet()
CrearDataAdapter(procedimientoAlmacenado, args).Fill(mDataSet)
Return mDataSet
End Function
Protected Overrides Function CrearDataAdapter(ByVal ProcedimientoAlmacenado As String, ByVal ParamArray Args() As Object) As System.Data.IDataAdapter
Dim mCom As MySqlCommand = Comando(ProcedimientoAlmacenado)
If Not Args Is Nothing Then
CargarParametros(mCom, Args)
End If
Return New MySqlDataAdapter(mCom)
End Function
Protected Overrides Sub CargarParametros(ByVal com As System.Data.IDbCommand, ByVal args As [Object]())
For i As Integer = 1 To com.Parameters.Count - 1
Dim p = DirectCast(com.Parameters(i), MySql.Data.MySqlClient.MySqlParameter)
p.Value = IIf(i <= args.Length, args(i - 1), Nothing)
Next
End Sub
Este es el procedimiento
CREATE DEFINER=`root`@`localhost` PROCEDURE `PE_C_TM_USUARIOS`(IN codigo varchar(20), IN clave varchar(255))
BEGIN
DECLARE numactpass integer;
DECLARE idusuario integer;
DECLARE valor integer;
select -1 into valor;
select idtf_usuarios into idusuario from `mydb`.`tm_usuarios`
where cedula = codigo;
SELECT numeroactualpassword into numactpass from `mydb`.`td_seguridadusuarios`
where tm_usuarios_idtf_usuarios = idusuario;
if numactpass = 1 then
SELECT A.PrimerNombre, A.ApellidoPaterno
FROM `mydb`.`tm_usuarios` A, `mydb`.`td_seguridadusuarios` B
where
A.cedula = codigo and
A.idtf_usuarios = B.tm_usuarios_idtf_usuarios and
DES_DECRYPT( password1) = clave;
end if;
if numactpass = 2 then
/*SELECT 1 into valor*/
SELECT A.PrimerNombre
FROM `mydb`.`tm_usuarios` A, `mydb`.`td_seguridadusuarios` B
where
A.cedula = codigo and
A.idtf_usuarios = B.tm_usuarios_idtf_usuarios and
DES_DECRYPT( password2) = clave;
end if;
if numactpass = 3 then
SELECT A.PrimerNombre
FROM `mydb`.`tm_usuarios` A, `mydb`.`td_seguridadusuarios` B
where
A.cedula = codigo and
A.idtf_usuarios = B.tm_usuarios_idtf_usuarios and
DES_DECRYPT( password3) = clave;
end if;
select valor;
END
capa de presentacion
Dim dsUsu As New DataSet
Dim BLUsuarios As New BLogicaNegocio.lnUsuarios
dsUsu = BLUsuarios.fAutenticaUsuarios(UserName, Password)
Capa de logina de negocio
Public Function fAutenticaUsuarios(ByVal codigo As String, ByVal clave As String) As DataSet
Dim ds As New DataSet
Try
ds = Me.DatosSql.TraerDataSet("PE_C_TM_USUARIOS", codigo, clave)
Catch ex As Exception
Dim mensaje As String = ex.Message
End Try
Return ds
End Function
capa de acceso a datos
Public Overloads Function TraerDataSet(ByVal procedimientoAlmacenado As String, ByVal ParamArray args As [Object]()) As DataSet
Dim mDataSet = New DataSet()
CrearDataAdapter(procedimientoAlmacenado, args).Fill(mDataSet)
Return mDataSet
End Function
Protected Overrides Function CrearDataAdapter(ByVal ProcedimientoAlmacenado As String, ByVal ParamArray Args() As Object) As System.Data.IDataAdapter
Dim mCom As MySqlCommand = Comando(ProcedimientoAlmacenado)
If Not Args Is Nothing Then
CargarParametros(mCom, Args)
End If
Return New MySqlDataAdapter(mCom)
End Function
Protected Overrides Sub CargarParametros(ByVal com As System.Data.IDbCommand, ByVal args As [Object]())
For i As Integer = 1 To com.Parameters.Count - 1
Dim p = DirectCast(com.Parameters(i), MySql.Data.MySqlClient.MySqlParameter)
p.Value = IIf(i <= args.Length, args(i - 1), Nothing)
Next
End Sub
Este es el procedimiento
CREATE DEFINER=`root`@`localhost` PROCEDURE `PE_C_TM_USUARIOS`(IN codigo varchar(20), IN clave varchar(255))
BEGIN
DECLARE numactpass integer;
DECLARE idusuario integer;
DECLARE valor integer;
select -1 into valor;
select idtf_usuarios into idusuario from `mydb`.`tm_usuarios`
where cedula = codigo;
SELECT numeroactualpassword into numactpass from `mydb`.`td_seguridadusuarios`
where tm_usuarios_idtf_usuarios = idusuario;
if numactpass = 1 then
SELECT A.PrimerNombre, A.ApellidoPaterno
FROM `mydb`.`tm_usuarios` A, `mydb`.`td_seguridadusuarios` B
where
A.cedula = codigo and
A.idtf_usuarios = B.tm_usuarios_idtf_usuarios and
DES_DECRYPT( password1) = clave;
end if;
if numactpass = 2 then
/*SELECT 1 into valor*/
SELECT A.PrimerNombre
FROM `mydb`.`tm_usuarios` A, `mydb`.`td_seguridadusuarios` B
where
A.cedula = codigo and
A.idtf_usuarios = B.tm_usuarios_idtf_usuarios and
DES_DECRYPT( password2) = clave;
end if;
if numactpass = 3 then
SELECT A.PrimerNombre
FROM `mydb`.`tm_usuarios` A, `mydb`.`td_seguridadusuarios` B
where
A.cedula = codigo and
A.idtf_usuarios = B.tm_usuarios_idtf_usuarios and
DES_DECRYPT( password3) = clave;
end if;
select valor;
END
Valora esta pregunta


0