none
Recuperar um ID RRS feed

  • Pergunta

  • Tenho o seginte código.

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["E-IndustriasConnectionString"].ConnectionString);

     

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

     

    SqlParameter prChTipo;

    prChTipo =

    new SqlParameter("@CH_TIPO", SqlDbType.Int, 4);

    prChTipo.Value = 0;

    cmd.Parameters.Add(prChTipo);

    prChTipo.Direction =

    ParameterDirection.InputOutput;

     

    try

    {

    conn.Open();

    grupo =

    Convert.ToString(cmd.ExecuteScalar());

    Session[

    "Codigo"] = prChTipo.Value.ToString();

    Session[

    "CHTIPO"] = prChTipo.Value.ToString();

    conn.Close();

    }

     

    catch (Exception ex)

    {

    Response.Write(ex.ToString());

    }....


    Na minha base de dados, SQL SERVER 2005, tenho um campo ch_top.
    Como faço para capturar este compo e coloca-lo dentro de uma session.

    O campo ja está sendo selecionado na procedure.

    Grato
    Dirceu


    DMA2
    quarta-feira, 18 de novembro de 2009 11:48

Respostas

  • Isso tem a ver com a lógica do seu SELECT.

    Faça assim:


    SELECT CH_TOP, login, senha  FROM Tb_Pec_01_Usuarios
    WHERE (@LOGIN  IS NULL OR LOGIN  LIKE '%' + @LOGIN +'%' )
               AND
               (@SENHA  IS NULL OR SENHA LIKE '%' + @SENHA +'%' )

    quinta-feira, 19 de novembro de 2009 18:47

Todas as Respostas

  • Do mesmo jeito que você fez com o Parâmetro "prChTipo"
    quarta-feira, 18 de novembro de 2009 11:51
  • No final da execução da sua proc coloque
    SELECT
     SCOPE_IDENTITY
    ()
    
    Depois coloque o parameterdirection

    SqlCommand cmd = new SqlCommand("sp_getIdentity", connection);
                connection.Open();
                SqlParameter sp= new SqlParameter("@id",SqlDbType.Int);
                sp.Direction = ParameterDirection.Output;
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(sp);

                int id=sp.Value.ToString();

    quarta-feira, 18 de novembro de 2009 11:52
    Moderador
  • Olá,

    Ja tentei dessa forma, não funcionou?

    Já estou pensando em um DT, se não conseguir de outa forma.

    Dirceu
    DMA2
    quarta-feira, 18 de novembro de 2009 11:53
  • Posta a sua procedure aqui e a parte da execução do código.
    quarta-feira, 18 de novembro de 2009 12:01
    Moderador
  • Procedure:

    ALTER

     

    PROCEDURE [dbo].[USP_Pec_01_Usuarios_Seleciona]

     

    @LOGIN

    AS varchar(50),

    @SENHA

    AS varchar(255),

    @SITUACAO

    AS varchar(7),

    @CH_TIPO

    AS int OUTPUT

    As

    if

     

    (@login Is Not Null)

    Begin

     

    SET NOCOUNT ON

     

    SELECT

     

    a.Descricao, a.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

    SELECT

     

    ch_top from TTb_Pec_01_Usuarios WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao

     

    SET

     

    @CH_TIPO = (SELECT ch_top from Tb_Pec_01_Usuarios 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

    Se faço a seleção cmo usaso no chtipo da erro no Global.asax

     

    protected void Application_AuthenticateRequest(object sender, EventArgs e)

    {

     

    HttpCookie Cookie;

    Cookie = Request.Cookies[

    FormsAuthentication.FormsCookieName];

     

    if ((Cookie != null))

    {

     

    string encTik;

     

    GenericIdentity GI;

     

    GenericPrincipal GP;

     

    FormsAuthenticationTicket tik;

    encTik = Cookie.Value;

    tik =

    FormsAuthentication.Decrypt(encTik);

    GI =

    new GenericIdentity(tik.Name);

    GP =

    new GenericPrincipal(GI, new string[] { tik.UserData });

    Context.User = GP;

    }

    }

    </

     

    script>


    DMA2
    quarta-feira, 18 de novembro de 2009 12:05
  • Fale,

     

    Olha esses links:

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/ab93740b-61f7-4ef6-b693-9978b9060cb8

     

    http://msdn.microsoft.com/pt-br/library/cc517962.aspx

     

     

    Olha esse exemplo do link http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlcommand.executescalar.aspx :

     

    static public int AddProductCategory(string newName, string connString)

    {

        Int32 newProdID = 0;

        string sql =

            "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "

            + "SELECT CAST(scope_identity() AS int)";

        using (SqlConnection conn = new SqlConnection(connString))

        {

            SqlCommand cmd = new SqlCommand(sql, conn);

            cmd.Parameters.Add("@Name", SqlDbType.VarChar);

            cmd.Parameters["@name"].Value = newName;

            try

            {

                conn.Open();

                newProdID = (Int32)cmd.ExecuteScalar();

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

            }

        }

        return (int)newProdID;

     

    }

    Abraço!


    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    quarta-feira, 18 de novembro de 2009 12:23
  • Veja ae

    http://aspnet.4guysfromrolla.com/articles/062905-1.aspx
    http://forums.asp.net/t/21859.aspx
    quarta-feira, 18 de novembro de 2009 12:25
    Moderador
  • Olá,

    Não foi possível fazer isso.

    Só pode ser passado um valor?

    Como faço para criar 2 variável publicas, armazenar nelas o login e senha e numa página seguinte recuperar o valor destas variveis para fazer a consulta e resgatar o ch_top.

    A pessoa entra, coloca login e senha e na pagina para onde vai ser direcionada, captro o login e a senha efaço a busca antes de segir com o processo.

    ...


    DMA2
    quarta-feira, 18 de novembro de 2009 16:36
  • Vc pode passar o login e senha por session que é mais seguro que passar por querystring, querystring somente passe se vc for criptografar.
    quarta-feira, 18 de novembro de 2009 16:38
    Moderador
  • Fale,

     

    Complementando Seilor quanto a criptografia olha esses links:

     

    http://www.danielgarcia.com.br/post/Criptografando-a-QueryString-de-uma-URL-com-ASPNET.aspx

     

    http://diariodafonte.wordpress.com/2009/04/10/criptografando-a-querystring/

     

    Abraço!


    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    quarta-feira, 18 de novembro de 2009 16:42
  • Olá,

    Uma útima tentativa, antes de partir para session:

    Tenho na procedure;

    ALTER PROCEDURE [dbo].[USP_Pec_01_Usuarios_Seleciona]
      
          @LOGIN  AS varchar(50),
          @SENHA AS varchar(255),
          @SITUACAO AS varchar(7),
          @CH_TIPO AS int OUTPUT
    As
    if (@login Is Not Null)
    Begin
     SET NOCOUNT ON


    SELECT a.Descricao, a.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

    SELECT ch_top from Tb_Pec_01_Usuarios WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao

    SET @CH_TIPO = (SELECT ch_top from Tb_Pec_01_Usuarios  WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao )

    update Tb_Pec_01_Usuarios
      set situacao = 'Inativo' WHERE Data_Vencimento > Data_Cadastro + 3650
    SET NOCOUNT OFF

    End
    Else
    Begin
     SET NOCOUNT ON
        Select nome From tbl_pec_01_Usuarios
     SET NOCOUNT OFF
    End
    RETURN

    .................

    Tenho essa seleção

    SELECT ch_top from Tb_Pec_01_Usuarios WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao


    Tem outra forma de recuperar este valor na rotina sem usar o SqlParameter?


    protected void btnLogin_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["E-IndustriasConnectionString"].ConnectionString);

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

            SqlParameter prChTipo;
            prChTipo = new SqlParameter("@CH_TIPO", SqlDbType.Int, 4);
            prChTipo.Value = 0;
            cmd.Parameters.Add(prChTipo);
            prChTipo.Direction = ParameterDirection.InputOutput;

            try
            {
                conn.Open();
                grupo = Convert.ToString(cmd.ExecuteScalar());
                Session["Codigo"] = prChTipo.Value.ToString();
                Session["CHTIPO"] = prChTipo.Value.ToString();
                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.AddDays(1), 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));
                    conn.Close();
                }
            }
        }


    DMA2
    quarta-feira, 18 de novembro de 2009 17:20
  • Ta ae a resposta

    http://social.msdn.microsoft.com/forums/pt-BR/aspnetpt/thread/0b2d8a63-12fc-4c2f-8052-409c79772264
    quarta-feira, 18 de novembro de 2009 17:27
    Moderador
  • Amigo, não consegui applicar a minha rorina.

    Poderia me ajudar, tentei maos não funcionou..

    Este é o campo que quero trazer o conteudo.

    ch_top, como ficaria aplicato, compo tipo int

    param = new SqlParameter("@IDTerra", SqlDbType.Int);
    param.Value = IDTerra;
    parameters.Add(param);

    DMA2
    quarta-feira, 18 de novembro de 2009 17:43
  • Esse parameter na sua procedure tem que estar assim
    @IDTerra INT OUTPUT

    Já tentou isso?
    quarta-feira, 18 de novembro de 2009 17:45
    Moderador
  • Já, mas tem um execute scalar que só permite uma saida.

    Nã tem como usar um request...na rotina


    DMA2
    quarta-feira, 18 de novembro de 2009 17:52
  • Ae vc não usa scalar pq ele só retorna o 1.

    Da uma lida

    http://forums.asp.net/t/886305.aspx
    quarta-feira, 18 de novembro de 2009 18:32
    Moderador
  • Bom dia,

    Fiz o seguinte,

    Passei o login e senha via session, como façp para buscar na tabela de usuarios o ch_top, baseado nesses dois parâmentros.

    Teria um exemplo?

    Fiz Dessa forma mas não deu certo.


    Código:

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                preencheGrid(ch_top);
            }
        }
        private void preencheGrid(string ch_top)
        {
            clsOfertas artigo = new clsOfertas();
            DataSet dtSet = artigo.BuscaCategoriasGrid(Session["ch_Login"].ToString(), Session["ch_Senha"].ToString());

            if (dtSet != null)
            {
                if (dtSet.Tables[0].Rows.Count > 0)
                {
                    this.ch_top.Text = dtSet.Tables[0].Rows[0][2].ToString();
                }
            }
        }

     

    Classe:

    /// </summary>
        /// Metodo que busca links
        /// Preenchimento tópicos de links
        /// <param name="receita"></param>
        /// <returns></returns>
        public DataSet BuscaCategoriasGrid(string login, string senha)
        {
            try
            {
                sBanco.conecta();

                SqlCommand sqlc = sBanco.sConn.CreateCommand();
                sqlc.CommandText = "USP_EI_01_Usuarios_Busca_ch_top";
                sqlc.CommandType = CommandType.StoredProcedure;

                sqlc.Parameters.Add("@LOGIN", SqlDbType.VarChar, 150);
                sqlc.Parameters["@LOGIN"].Value = login;

                sqlc.Parameters.Add("@SENHA", SqlDbType.VarChar, 255);
                sqlc.Parameters["@SENHA"].Value = senha;

                SqlDataAdapter dtAdapter = new SqlDataAdapter(sqlc);
                DataSet dtSet = new DataSet();
                dtAdapter.Fill(dtSet);
                return dtSet;

            }
            catch (Exception e)
            {
                throw new Exception("erro na classe clsCategorias.cs[Relatórios de categorias]" + e.Message);
            }
            finally
            {
                sBanco.desconecta();
            }
        }

     

    Procedure:

    ALTER PROCEDURE [dbo].[USP_Pec_01_Usuarios_Busca_ch_top]
      
          @LOGIN  AS varchar(50),
       @SENHA AS varchar(255),
    As
    if (@login Is Not Null)
    Begin
     SET NOCOUNT ON

    SELECT ch_top, login, senha from Tb_Pec_01_Usuarios WHERE Login = @Login AND Senha = @Senha

    End




    Grato

    Dirceu


    DMA2
    quinta-feira, 19 de novembro de 2009 12:08
  • Deixa sua procedure assim que vai dar certo

    SELECT ch_top, login, senha from Tb_Pec_01_Usuarios
    WHERE ( LOGIN = ''+@Login"+'') AND ( Senha = ''+@Senha+'' )
    quinta-feira, 19 de novembro de 2009 12:36
    Moderador
  • Olá,


    Postei a procedure errada, esta é a correta

    ALTER

     

    PROCEDURE [dbo].[USP_EI_01_Usuarios_Busca_ch_top]

    @login

    AS varchar(50),

    @senha

    AS varchar(255)

    As

    BEGIN

    SET

     

    NOCOUNT ON

    SELECT

     

    CH_TOP, login, senha FROM Tb_Pec_01_Usuarios

    WHERE

     

    (@LOGIN IS NULL OR (@LOGIN IS NOT NULL AND LOGIN LIKE '%' + @LOGIN +'%' ))

     

    AND (@SENHA IS NULL OR (@SENHA IS NOT NULL AND LOGIN LIKE '%' + @SENHA +'%' ))

    SET

     

    NOCOUNT OFF

    END


    DMA2
    quinta-feira, 19 de novembro de 2009 16:16
  • Sim está correta :)
    quinta-feira, 19 de novembro de 2009 16:21
    Moderador
  • Mas não retorna dada!
    DMA2
    quinta-feira, 19 de novembro de 2009 16:26
  • Quais são parametros que vc está passando? rode o profile do sql e veja o que está passando
    quinta-feira, 19 de novembro de 2009 16:34
    Moderador
  • Olá,

    O que tentei fazer foi isso. Montar um Data Set e pegar dai o ch_top. Passando o Login e a senha como parâmetro de busca, veja:

    Teria um exemplo?

    Fiz Dessa forma mas não deu certo.


    Código:

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                preencheGrid(ch_top);
            }
        }
        private void preencheGrid(string ch_top)
        {
            clsOfertas artigo = new clsOfertas();
            DataSet dtSet = artigo.BuscaCategoriasGrid(Session["ch_Login"].ToString(), Session["ch_Senha"].ToString());

            if (dtSet != null)
            {
                if (dtSet.Tables[0].Rows.Count > 0)
                {
                    this.ch_top.Text = dtSet.Tables[0].Rows[0][2].ToString();
                }
            }
        }

    ........................................................................................................................................................... 

    Classe:

    /// </summary>
        /// Metodo que busca links
        /// Preenchimento tópicos de links
        /// <param name="receita"></param>
        /// <returns></returns>
        public DataSet BuscaCategoriasGrid(string login, string senha)
        {
            try
            {
                sBanco.conecta();

                SqlCommand sqlc = sBanco.sConn.CreateCommand();
                sqlc.CommandText = "USP_EI_01_Usuarios_Busca_ch_top";
                sqlc.CommandType = CommandType.StoredProcedure;

                sqlc.Parameters.Add("@LOGIN", SqlDbType.VarChar, 150);
                sqlc.Parameters["@LOGIN"].Value = login;

                sqlc.Parameters.Add("@SENHA", SqlDbType.VarChar, 255);
                sqlc.Parameters["@SENHA"].Value = senha;

                SqlDataAdapter dtAdapter = new SqlDataAdapter(sqlc);
                DataSet dtSet = new DataSet();
                dtAdapter.Fill(dtSet);
                return dtSet;

            }
            catch (Exception e)
            {
                throw new Exception("erro na classe clsCategorias.cs[Relatórios de categorias]" + e.Message);
            }
            finally
            {
                sBanco.desconecta();
            }
        }

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    -- ================================================
    -- Dirceu Martins de Azevedo
    -- procedure USP_EI_01_categorias_Relatorio
    --
    -- Monta o relatório para manutenção dos dados
    -- dados passados pela classe cLScATEGORIAS.cs
    -- Artigos - Atualizar.aspx
    --
    -- Para todas as páginas de CATEGORIAS do portal
    -- www.e-industrias.com.br.
    -- ================================================
    ALTER PROCEDURE [dbo].[USP_EI_01_Usuarios_Busca_ch_top]
          @login AS varchar(50),
          @senha AS varchar(255)
    As
    BEGIN
    SET NOCOUNT ON
    SELECT CH_TOP, login, senha  FROM Tb_Pec_01_Usuarios
    WHERE (@LOGIN  IS NULL OR (@LOGIN  IS NOT NULL AND LOGIN  LIKE '%' + @LOGIN +'%' ))
          AND (@SENHA  IS NULL OR (@SENHA  IS NOT NULL AND LOGIN  LIKE '%' + @SENHA +'%' ))
    SET NOCOUNT OFF
    END


    Não dá erro, mas tambem não retorna nada.

    abs,


    DMA2
    quinta-feira, 19 de novembro de 2009 18:43
  • Isso tem a ver com a lógica do seu SELECT.

    Faça assim:


    SELECT CH_TOP, login, senha  FROM Tb_Pec_01_Usuarios
    WHERE (@LOGIN  IS NULL OR LOGIN  LIKE '%' + @LOGIN +'%' )
               AND
               (@SENHA  IS NULL OR SENHA LIKE '%' + @SENHA +'%' )

    quinta-feira, 19 de novembro de 2009 18:47
  • Pode fazer tb como eu tinha te falado já que vc não passa null como parametro


    SELECT ch_top, login, senha from Tb_Pec_01_Usuarios
    WHERE ( LOGIN = ''+@Login"+'') AND ( Senha = ''+@Senha+'' )
    quinta-feira, 19 de novembro de 2009 19:11
    Moderador
  • Bom dia,

    Identifiquei o erro ques estava ocorrendo.

    Esta tentando usar e ch_top.Text não funcionava, não trazia nada.

    Então fiz o seguinte:

    string

     

     varteste = this.ch_top.Text = dtSet.Tables[0].Rows[0][0].ToString();

    Peguei o conteudo de  varteste e mandei gravar, deu certo.

    Muito obrigado pela ajuda!

    sexta-feira, 20 de novembro de 2009 11:18