Usuário com melhor resposta
Stored Procedure com C#

Pergunta
-
Olá amigos,
Tenho uma procedure (código abaixo) que checa os dados para login, caso o user não exista retorna uma mensagem para a minha aplicação que o usuário não existe, caso positivo retorna os dados solicitados para criar uma session.
O Problema é que não consigo tratar os valores nulos na CLASSE Usuarios, sempre apresenta falhas, ou seja quando o usuario existe a variavel @Status vem vazia, e vice versa com os outros dados.
CODIGO PROCEDURE
ALTER
PROC [dbo].[spUsuarioChecar]@CPF
Nvarchar(50),@Senha
varchar(50),@idUsuario
int output,@Nivel
int output,@Status
varchar (50) output,@idCliente
varchar (50) outputAS
IF
exists (SELECT CPF, Senha FROM Usuarios WHERE CPF = @CPF and Senha = @Senha) BEGIN SET @idUsuario = (SELECT idUsuario FROM Usuarios WHERE CPF = @CPF) SET @idCliente = (SELECT idCliente FROM Usuarios WHERE CPF = @CPF) SET @Nivel = (SELECT NivelAcesso FROM Usuarios WHERE CPF = @CPF) ENDELSE
BEGIN SET @Status = 'Usuario ou senha inválidos' ENDCLASSE USUARIOS
using
System;using
System.Data;using
System.Configuration;using
System.Web;using
System.Web.Security;using
System.Web.UI;using
System.Web.UI.WebControls;using
System.Web.UI.WebControls.WebParts;using
System.Web.UI.HtmlControls;using
System.Data.SqlTypes;using
System.Data.SqlClient;public
class Usuarios : Conexao{
public string CPF; public string Senha; public int idUsuario; public string idCliente; public int Nivel; public string StatusdeErro; public string Status; public void Checa(){
Conectar();
SqlCommand cd = new SqlCommand();cd.CommandText =
"spUsuarioChecar";cd.CommandType =
CommandType.StoredProcedure;cd.Connection = cn;
SqlParameter pCPF = new SqlParameter("@CPF", SqlDbType.NVarChar, 50);pCPF.Value = CPF;
cd.Parameters.Add(pCPF);
SqlParameter pSenha = new SqlParameter("@Senha", SqlDbType.NVarChar, 50);pSenha.Value = Senha;
cd.Parameters.Add(pSenha);
SqlParameter pidUsuario;pidUsuario = cd.Parameters.Add(
"@idUsuario", SqlDbType.Int, 50);pidUsuario.Direction =
ParameterDirection.Output; SqlParameter pidCliente;pidCliente = cd.Parameters.Add(
"@idCliente", SqlDbType.NVarChar, 50);pidCliente.Direction =
ParameterDirection.Output; SqlParameter pNivel;pNivel = cd.Parameters.Add(
"@Nivel", SqlDbType.Int, 50);pNivel.Direction =
ParameterDirection.Output; SqlParameter pStatus;pStatus = cd.Parameters.Add(
"@Status", SqlDbType.NVarChar, 50);pStatus.Direction =
ParameterDirection.Output; try{
cd.ExecuteNonQuery();
idUsuario = (
Int32)cd.Parameters["@idUsuario"].Value;idCliente = (
String)cd.Parameters["@idCliente"].Value;Nivel = (
Int32)cd.Parameters["@Nivel"].Value;}
catch (SqlException erro){
StatusdeErro =
"Falhou. Motivo: " + erro.Message;}
Desconectar();
}
}
Respostas
-
Giles,
Você já tentou fazer o tratamento de valores nulls, utilizando a função IsNull(), veja o exemplo:
SET @idUsuario = (SELECT IsNull(idUsuario,0) FROM Usuarios WHERE CPF = @CPF)
SET @idCliente = (SELECT IsNull(idCliente,0) FROM Usuarios WHERE CPF = @CPF) SET @Nivel = (SELECT IsNull(NivelAcesso,0) FROM Usuarios WHERE CPF = @CPF)Se eu entendi acredito que isso pode ajudar.
Todas as Respostas
-
altere a proc assim
ALTER PROC [dbo].[spUsuarioChecar]
@CPF Nvarchar(50),
@Senha
varchar(50),@idUsuario
int output,@Nivel
int output,@Status
varchar (50) output,@idCliente
varchar (50) outputAS
IF
exists (SELECT CPF, Senha FROM Usuarios WHERE CPF = @CPF and Senha = @Senha) BEGINSelect @idUsuario = idUsuario , @idUsuario = idCliente , @Nivel = NivelAcesso, @status = 1 from FROM Usuarios WHERE CPF = @CPF
Return
ENDELSE
BEGINSelect @idUsuario = 0, @idUsuario = '', @Nivel = 0, @status = 0 From FROM Usuarios WHERE CPF = @CPF
Return
END
-
Giles,
Você já tentou fazer o tratamento de valores nulls, utilizando a função IsNull(), veja o exemplo:
SET @idUsuario = (SELECT IsNull(idUsuario,0) FROM Usuarios WHERE CPF = @CPF)
SET @idCliente = (SELECT IsNull(idCliente,0) FROM Usuarios WHERE CPF = @CPF) SET @Nivel = (SELECT IsNull(NivelAcesso,0) FROM Usuarios WHERE CPF = @CPF)Se eu entendi acredito que isso pode ajudar.
-