none
Stored Procedure com C# RRS feed

  • 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) output

    AS

    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)

    END

    ELSE

    BEGIN

    SET @Status = 'Usuario ou senha inválidos'

    END

     

    CLASSE 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();

    }

    }

    terça-feira, 15 de maio de 2007 15:58

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.

    terça-feira, 15 de maio de 2007 16:27

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) output

    AS

    IF exists (SELECT CPF, Senha FROM Usuarios WHERE CPF = @CPF and Senha = @Senha)

    BEGIN

    Select @idUsuario = idUsuario , @idUsuario = idCliente , @Nivel  = NivelAcesso, @status = 1  from FROM Usuarios WHERE CPF = @CPF

    Return

    END

    ELSE

    BEGIN

    Select @idUsuario = 0, @idUsuario = '', @Nivel  = 0, @status = 0 From FROM Usuarios WHERE CPF = @CPF

    Return

    END

     

     

    terça-feira, 15 de maio de 2007 16:26
  • 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.

    terça-feira, 15 de maio de 2007 16:27
  • Maravilha....

     

    funcionou!!!

     

    Grato a todos.

    terça-feira, 15 de maio de 2007 17:21