none
Passar o valor de uma variável de sessão para uma stored procedure. RRS feed

  • Pergunta

  • Boa tarde,

    Eu tenho o seguinte código no evento load da minha página:

               Session["NOME"] = User.Identity.Name;

                string conString = @"Data Source=xxx.xxx.xxx.xxx;Initial Catalog=xxx;Persist Security Info=True;User ID=xxxx;Password=xxxxxxxx";

                string usuarioLogado = (string)Session["NOME"];

                SqlConnection con = new SqlConnection(conString);

                string sql = "SELECT F_ID FROM FUNCIONARIO WHERE LOGIN='" + usuarioLogado + "'";

                SqlCommand cmd = new SqlCommand(sql, con);

                con.Open();

                SqlDataReader reader = cmd.ExecuteReader();

                reader.Read();

                Int32 f_id = (Int32)reader["F_ID"];

                Session["funcID"] = f_id;

                reader.Close();
                con.Close(); 

    Agora eu queria pegar o valor da minha variavel de sessao (funcID) e passa-la para uma SP. Como eu faço isso?

    Obrigado.


    sexta-feira, 11 de janeiro de 2013 15:23

Respostas

  • Vou postar um metodo de acesso a dados em C# para updatar algo através de uma procedure:

    internal string UpdateEnvioEmail(Entity.EnviaProtocoloAplicacao objEntity, int CodApl)
            {
                try
                {
                    SQLHelper.BeginTransaction();
    
                    SqlParameter[] parameter = new SqlParameter[4];
    
                    parameter[0] = new SqlParameter("@ENVIOEMAIL", objEntity.BitEnvioEmail);
                    parameter[1] = new SqlParameter("@APL", CodApl);
                    parameter[2] = new SqlParameter("@CODVEST", objEntity.CodVest);
                    parameter[3] = new SqlParameter("@CODCANDIDATO", objEntity.CodCandidato);
    
                    DataTable dtRetorno = SQLHelper.GetDataTable("Pr_NomeProcedure", parameter);
                    SQLHelper.CommitTransaction();
    
                    return Convert.ToString(dtRetorno.Rows[0]["PROTOCOLO"]);
                }
                catch (Exception ex)
                {
                    SQLHelper.RollbackTransaction();
                    throw new Exception(ex.Message);
                }
            }


    Atenciosamente, Samuel dos Anjos

    Pessoal eu consegui resolver.

    Adicionei este trecho de código no evento Load:

    SessionParameter funcID = new SessionParameter();
                funcID.Name = "funcID";
                funcID.Type = TypeCode.Int32;
                funcID.SessionField = "funcID";

    e o seguinte trecho dentro do <InsertParameters>:

    <asp:SessionParameter Name="funcID" SessionField="funcID" DefaultValue="1014" />

    e na SP declarei:

    @funcID   int OUTPUT

     

    quinta-feira, 17 de janeiro de 2013 16:53

Todas as Respostas

  • Fernando,

    Veja se é isso que precisa:

    Criei uma variável para receber o valor

    int idFuncionario = (int)Session["funcID"];

    Aqui você passa o nome da procedure

    cmd.CommandText = "NomeDaProcedure";

    Diz que o tipo de comando é store procedure
    cmd.CommandType = CommandType.StoredProcedure;

    Cria um parâmetro para receber o valor desejado

    SqlParameter parametros = new SqlParameter("@idFuncionario", idFuncionario);



    Fernanda Sallai 

    Visite meu blog: www.fernandasallai.com.br

    Me siga no twitter @fernandasallai


    sexta-feira, 11 de janeiro de 2013 16:13
  • Fernando,

    Veja se é isso que precisa:

    Criei uma variável para receber o valor

    int idFuncionario = (int)Session["funcID"];

    Aqui você passa o nome da procedure

    cmd.CommandText = "NomeDaProcedure";

    Diz que o tipo de comando é store procedure
    cmd.CommandType = CommandType.StoredProcedure;

    Cria um parâmetro para receber o valor desejado

    SqlParameter parametros = new SqlParameter("@idFuncionario", idFuncionario);



    Fernanda Sallai 

    Visite meu blog: www.fernandasallai.com.br

    Me siga no twitter @fernandasallai


    minha sp é a seguinte:

     USE [XXX]
    GO
    /****** Object:  StoredProcedure [dbo].[INSERIR_CLIENTE]    Script Date: 01/11/2013 11:00:04 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER Procedure [dbo].[INSERIR_CLIENTE]

    @NOTAS        varchar(1500),

    AS
    BEGIN

    SET NOCOUNT ON;

    INSERT INTO NOTAS (C_ID, F_ID, NOTAS, DATA_NOTA) VALUES (1077, @ID, @NOTAS, getdate())

    END

    Como faço pra preencher a coluna F_ID? Eu não conseguir entender ainda. Nessa caso o valor da coluna F_ID seria o valor da variavel de sessao.


    sexta-feira, 11 de janeiro de 2013 17:32
  • Fernando,

    Eu coloquei trechos de código para você implementar no seu.

    Sua procedure precisa receber um argumento (idFuncionario) e você passa esse argumento no insert.

    Não sei se entendi o que vc precisa ainda.


    Fernanda Sallai
    Visite meu blog: www.fernandasallai.com.br
    Me siga no twitter @fernandasallai

    sexta-feira, 11 de janeiro de 2013 18:02
  • Cara,

    Você quer passar o @NOTAS?


    Atenciosamente, Samuel dos Anjos

    sexta-feira, 11 de janeiro de 2013 18:37
  • Cara,

    Você quer passar o @NOTAS?


    Atenciosamente, Samuel dos Anjos


    Não, o @notas eu ja to conseguindo passar. Só não consigo passar o valor da variavel de sessao q obtive no evendo load da páginas aspx para uma stored procedure que no caso seria o F_ID.
    terça-feira, 15 de janeiro de 2013 12:04
  • Cara,

    Na sua stored procedure, você também precisa declarar essa variável:

    USE [XXX] GO /****** Object: StoredProcedure [dbo].[INSERIR_CLIENTE] Script Date: 01/11/2013 11:00:04 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create Procedure [dbo].[INSERIR_CLIENTE] @NOTAS varchar(1500), @F_ID INT

    AS BEGIN SET NOCOUNT ON; INSERT INTO NOTAS (C_ID, F_ID, NOTAS, DATA_NOTA) VALUES (1077, @ID, @NOTAS, getdate()) END

    E agora sim na programação você conseguirá passar por um parametro esse valor para utilizar na sua procedure.


    Atenciosamente, Samuel dos Anjos

    terça-feira, 15 de janeiro de 2013 15:03
  • Vou postar um metodo de acesso a dados em C# para updatar algo através de uma procedure:

    internal string UpdateEnvioEmail(Entity.EnviaProtocoloAplicacao objEntity, int CodApl)
            {
                try
                {
                    SQLHelper.BeginTransaction();
    
                    SqlParameter[] parameter = new SqlParameter[4];
    
                    parameter[0] = new SqlParameter("@ENVIOEMAIL", objEntity.BitEnvioEmail);
                    parameter[1] = new SqlParameter("@APL", CodApl);
                    parameter[2] = new SqlParameter("@CODVEST", objEntity.CodVest);
                    parameter[3] = new SqlParameter("@CODCANDIDATO", objEntity.CodCandidato);
    
                    DataTable dtRetorno = SQLHelper.GetDataTable("Pr_NomeProcedure", parameter);
                    SQLHelper.CommitTransaction();
    
                    return Convert.ToString(dtRetorno.Rows[0]["PROTOCOLO"]);
                }
                catch (Exception ex)
                {
                    SQLHelper.RollbackTransaction();
                    throw new Exception(ex.Message);
                }
            }


    Atenciosamente, Samuel dos Anjos

    terça-feira, 15 de janeiro de 2013 15:08
  • Vou postar um metodo de acesso a dados em C# para updatar algo através de uma procedure:

    internal string UpdateEnvioEmail(Entity.EnviaProtocoloAplicacao objEntity, int CodApl)
            {
                try
                {
                    SQLHelper.BeginTransaction();
    
                    SqlParameter[] parameter = new SqlParameter[4];
    
                    parameter[0] = new SqlParameter("@ENVIOEMAIL", objEntity.BitEnvioEmail);
                    parameter[1] = new SqlParameter("@APL", CodApl);
                    parameter[2] = new SqlParameter("@CODVEST", objEntity.CodVest);
                    parameter[3] = new SqlParameter("@CODCANDIDATO", objEntity.CodCandidato);
    
                    DataTable dtRetorno = SQLHelper.GetDataTable("Pr_NomeProcedure", parameter);
                    SQLHelper.CommitTransaction();
    
                    return Convert.ToString(dtRetorno.Rows[0]["PROTOCOLO"]);
                }
                catch (Exception ex)
                {
                    SQLHelper.RollbackTransaction();
                    throw new Exception(ex.Message);
                }
            }


    Atenciosamente, Samuel dos Anjos

    Pessoal eu consegui resolver.

    Adicionei este trecho de código no evento Load:

    SessionParameter funcID = new SessionParameter();
                funcID.Name = "funcID";
                funcID.Type = TypeCode.Int32;
                funcID.SessionField = "funcID";

    e o seguinte trecho dentro do <InsertParameters>:

    <asp:SessionParameter Name="funcID" SessionField="funcID" DefaultValue="1014" />

    e na SP declarei:

    @funcID   int OUTPUT

     

    quinta-feira, 17 de janeiro de 2013 16:53