none
Selecionar um campo RRS feed

  • Pergunta

  • Olá pessoal,

     

    Tenho esta procedure, preciso selecionar o campo ch_top da tabela Tb_Pec_01_Usuarios.

     

    ALTER PROCEDURE [dbo].[USP_Pec_01_Usuarios_Seleciona]

    @LOGIN AS varchar(50),

    @SENHA AS varchar(255),

    @SITUACAO AS varchar(7)

    As

    if (@login Is Not Null)

    Begin

    SET NOCOUNT ON

    SELECT a.Descricao from Tb_Pec_01_Usuarios_Grupos a

    INNER JOIN Tb_Pec_01_Usuarios b ON a.ch_top=b.grupo WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao

     

    update Tb_Pec_01_Usuarios

    set situacao = 'Inativo' WHERE Data_Vencimento > Data_Cadastro + 365

    SET NOCOUNT OFF

    End

    Else

    Begin

     

     

    Grato

    Dirceu

    terça-feira, 17 de julho de 2007 11:31

Todas as Respostas

  • Boas,

    Não entendi muito bem, mas de acordo com a estrutura que vc colocou basta fazer isso:

    Code Snippet
    SELECT  
     a.Descricao,
     b.ch_top
    FROM  
     Tb_Pec_01_Usuarios_Grupos a
     INNER JOIN Tb_Pec_01_Usuarios b ON a.ch_top = b.grupo
    WHERE
     Login = @Login AND
     Senha = @Senha And
     Situacao = @Situacao

     

     

    terça-feira, 17 de julho de 2007 12:34
  • Olá Daniel,

     

    Esse é meu problema, estou usando ExecuteScalar()...

    Tenho esta rotina, que recebe um parâmetro de uma procedure. Visto que usando o ExecuteScalar(), me retornará smente um campo, como devo proceder para que retorne além do grupo, me retorne mais o campo ch_top da tabela Tb_Pec_01_Usuarios.

     

    clsCript cript = new clsCript();

    senha = cript.encrypt(txtSenha.Text);

    SqlCommand cmd = new SqlCommand("USP_Pec_01_Usuarios_Seleciona", conn);

    cmd.CommandType = CommandType.StoredProcedure;

    SqlParameter Login = new SqlParameter("@Login", SqlDbType.VarChar, 50);

    Login.Value = this.txtLogin.Text.Trim();

    cmd.Parameters.Add(Login);

    SqlParameter Senha = new SqlParameter("@Senha", SqlDbType.VarChar, 255);

    Senha.Value = senha;

    cmd.Parameters.Add(Senha);

    SqlParameter Situacao = new SqlParameter("@Situacao", SqlDbType.VarChar, 7);

    Situacao.Value = "Ativo";

    cmd.Parameters.Add(Situacao);

    try

    {

    conn.Open();

    grupo = Convert.ToString(cmd.ExecuteScalar());

    conn.Close();

    }

    catch (Exception ex)

    {

    Response.Write(ex.ToString());

    }

    finally

    {

    if (grupo == "")

    {

    this.lblMensagem.Visible = true;

    }

    else

    {

    string encTik;

    HttpCookie Cookie;

    FormsAuthenticationTicket tik;

    tik = new FormsAuthenticationTicket(1, txtLogin.Text, DateTime.Now, DateTime.Now.AddMinutes(20), chkLembrar.Checked, grupo);

    encTik = FormsAuthentication.Encrypt(tik);

    Cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTik);

    if (chkLembrar.Checked)

    {

    Cookie.Expires = DateTime.Now.AddDays(1);

    }

    Response.Cookies.Add(Cookie);

    Response.Redirect(FormsAuthentication.GetRedirectUrl(txtLogin.Text, chkLembrar.Checked));

     

    Procedure.............................

    ALTER PROCEDURE [dbo].[USP_Pec_01_Usuarios_Seleciona]

    @LOGIN AS varchar(50),

    @SENHA AS varchar(255),

    @SITUACAO AS varchar(7)

    As

    if (@login Is Not Null)

    Begin

    SET NOCOUNT ON

    SELECT a.Descricao from Tb_Pec_01_Usuarios_Grupos a

    INNER JOIN Tb_Pec_01_Usuarios b ON a.ch_top=b.grupo WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao

     

    update Tb_Pec_01_Usuarios

    set situacao = 'Inativo' WHERE Data_Vencimento > Data_Cadastro + 365

    SET NOCOUNT OFF

    End

    Else

    Begin

    SET NOCOUNT ON

    Select nome From tbl_pec_01_Usuarios

    SET NOCOUNT OFF

    End

    RETURN

     

     

    Grato,

    Dirceu


     

    terça-feira, 17 de julho de 2007 12:56
  • Haaa... tendi agora :.)

     

    O ExecuteScalar retorna pra vc a primeira coluna da primeira linha da sua consulta, ou seja, sempre 1 valor.

    Voce poderia entao criar um DataAdapter e usar o FILL para popular um dataset com o retorno da procedure.

    ...

    Dim da As SqlDataAdapter = New SqlDataAdapter

    Dim ds As New DataSet

    da.SelectCommand = cmd

    da.Fill(ds)

    ...

     

    Para ler dados de um dataset use:

    ds.Tables(0).item("nomeDoCampoRetornadoPelaProcedure")

    terça-feira, 17 de julho de 2007 13:34