Avance 1 - Proyecto 2
Avances:
- Se creo el SP para validar la existencia del usuario.
- Se llamo el SP ValidarUser desde la página web.
- Se creo el SP para validar contraseña de un usuario.
- Se creo el SP para hacer consulta del Id de un usuario.
- Se hacen las llamadas de los nuevos SP en la página web.
Horas Trabajadas: 6
Problemas encontrados y como fueron resueltos:
- No se sabia como llamar el SP ValidarUser desde la pagina web. Se hizo una investigacion bastante grande sobre como hacerlo. (Referencia 1-5)
- Surgía el error '800a0bb9' con descripcion "Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another". Para poder solucionarlo se intentaron varias cosas. La primera fue cambiar el tipo de dato en el SP, ya que se tenia como NVARCHAR entonces se cambio a VARCHAR para determinar si se solucionaba el error, sin embargo siguió sucediendo. Lo segundo que se intentó fue verificar el código para ver si estaba escrito correctamente, todo estaba bien entonces no se cambió nada. Luego se investigó en internet como solucionar el error y para esto se visitiaron las referencias 5 a 11. Ninguno de los links sirvió. Se busco la función CreateParameter que era lo que se encontraba en la línea del error y se leyó la información en el link de la referencia 12. Acá se observo que en lugar de usar las constantes se podían usar los valores. Entonces se cambió en todos los parametros objCommand.Parameters.Append objCommand.CreateParameter ("@NameUser", adVarChar, adParamInput, 40, Session("nombreUsuario")) por objCommand.Parameters.Append objCommand.CreateParameter ("@NameUser", 200, 1, 40, Session("nombreUsuario")) y esto resolvio el problema.
- Después surgió el problema de "Item cannot be found in the collection corresponding to the requested name or ordina". Para entender un poco mejor el error que se tenía se investigó y se leyó en las referencias 13. No quedó muy claro lo que había que hacer para solucionar el problema entonces lo que se hizo fue intentar cambiar objCommand.Parameters(3).Value por objCommand.Parameters("@Encontrado") y esto eliminó el error.
Temas adicionales investigados:
- Propiedad CommandType, para entender mejor como llamar un SP desde un archivo ASP. (Referencia 14)
- Propiedad Response.Write para depurar por medio de prints. (Referencia 15)
Moralejas:
- Intentar distintas soluciones con calma para ver si el error se soluciona.
Referencias externas solicitadas para resolución de problemas:
- https://www.tek-tips.com/viewthread.cfm?qid=1744810
- https://www.vbforums.com/showthread.php?682594-RESOLVED-How-do-I-get-returns-from-Stored-Procedures-in-Classic-ASP
- https://coderedirect.com/questions/224910/execute-stored-procedure-from-classic-asp
- https://stackoverflow.com/questions/16467145/how-to-call-a-stored-procedure-using-asp-classic
- https://stackoverflow.com/questions/39902685/execute-sql-stored-procedure-in-classic-asp?rq=1
- https://stackoverflow.com/questions/19936293/adodb-recordset-error-800a0bb9-arguments-are-of-the-wrong-type-are-out-of-acc
- https://stackoverflow.com/questions/8428704/adodb-recordset-error-800a0bb9-arguments-are-of-the-wrong-type
- https://www.vbforums.com/showthread.php?198554-Arguments-are-of-the-wrong-type-are-out-of-acceptable-range
- https://docs.microsoft.com/en-us/sql/ado/guide/data/ado-error-reference?view=sql-server-ver15#:~:text=Arguments%20are%20of%20the%20wrong,in%20an%20SQL%20SELECT%20statement.&text=This%20error%20can%20also%20occur,exist%20in%20the%20data%20store.
- https://docs.microsoft.com/en-us/sql/ado/guide/data/ado-error-reference?view=sql-server-ver15
- https://www.pdshop.com/arguments-adodb-connection-wrong-type-acceptable-range-kb-56/
- https://www.w3schools.com/asp/met_comm_createparameter.asp
- https://stackoverflow.com/questions/26120146/item-cannot-be-found-in-the-collection-corresponding-to-the-requested-name-or-or/26318735
- https://www.w3schools.com/asp/prop_comm_commandtype.asp
- https://www.w3schools.com/asp/met_write_response.asp
Codigos:
+ SP para validar la existencia del usuario
CREATE PROCEDURE ValidarUser
@NameUser VARCHAR(40)
, @outCodeResult INT OUTPUT
, @Encontrado INT OUTPUT
AS
BEGIN
SET NOCOUNT OFF
BEGIN TRY
DECLARE
@Contador INT = 1
, @CantFilasT INT
, @Usuario VARCHAR(40)
-- Determinar cantidad de filas para iterar por la tabla
SELECT @CantFilasT = COUNT(0) FROM dbo.Usuario;
-- Iterar todas las filas de la tabla Usuario para determinar si existe el usuario
WHILE @Contador <= @CantFilasT
BEGIN
-- Se selecciona el Usuario actual (se utiliza el contador y el id del usuario
SELECT @Usuario = [User]
FROM Usuario
WHERE @Contador = Id
-- Se determina si el parametro con el nombre de usuario es igual al usuario actual
IF @Usuario = @NameUser
BEGIN
-- Si es igual entonces el usuario existe
SET @Encontrado = 1;
BREAK;
END ELSE
BEGIN
-- Si no es igual entonces no existe por el momento
SET @Encontrado = 0;
END
-- Aumentar contador
SET @Contador = @Contador + 1
END;
END TRY
BEGIN CATCH
IF @@tRANCOUNT>0
ROLLBACK TRAN T1;
--INSERT EN TABLA DE ERRORES;
SET @outCodeResult=50005;
END CATCH
SET NOCOUNT ON
END
+ Llamar SP desde ASP Classic
' Validar usuario
Set objCommand = Server.CreateObject("ADODB.command")
objCommand.ActiveConnection = con
objCommand.CommandType = 4
objCommand.CommandText = "ValidarUser"
objCommand.Parameters.Append objCommand.CreateParameter ("@NameUser", 200, 1, 40, Session("nombreUsuario"))
objCommand.Parameters.Append objCommand.CreateParameter ("@outCodeResult", 3, 2)
objCommand.Parameters.Append objCommand.CreateParameter ("@Encontrado", 3, 2)
objCommand.Execute
Session("existeU") = objCommand.Parameters("@Encontrado")
Comments
Post a Comment