none
Utilizar connectionStrings do arquivo Web.config na camada de dados (ASP.NET) RRS feed

  • Pergunta

  • Pessoal muito bom dia, eu estou com uma dúvida muito grande em ASP.NET C# e gostaria de saber se alguém poderia me ajudar com o meu problema.

    Eu estou trabalhando com arquitetura do tipo camadas e para cada camada eu criei um novo projeto, sendo que a camada dados, negócio e entidade é apenas um projeto do tipo ClassLibrary para ajudar um pouco no arquivo de configuração o Web.config eu criei uma connectionStrings para mim utilizar na minhas classes de dados, porém a minha dificuldade começa ai quando eu vou até a minha classe da camada Dados e eu tento recuperar essa connectionStrings eu não consigo o Visual Studio não aceita a classe ConfigurationManager mesmo eu fornecendo a refência ao System.Configuration alguém sabe me dizer o que pode estar acontecendo, como eu faço para ter acesso a minhas connectionStrings do meu arquivo Web.config a partir da camada de dados.

    Segue abaixo algumas imagens para auxiliar no entendimento do meu problema tal como alguns trechos dos fontes.

    Erro no ConfigurationManager

    Arquivo Web.config

    Fonte utilizado

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    using System.Data.SqlClient;
    
    using System.Configuration;
    
    namespace School.Dados
    {
        public class Alunos
        {
            public List<School.Entidade.Alunos> ListarAlunos()
            {
                List<School.Entidade.Alunos> alunosEntidade = new List<School.Entidade.Alunos>();
    
                SqlConnection connection = new SqlConnection();
    
                connection.ConnectionString = ConfigurationManager.ConnectionStrings["databaseAlunos"].ConnectionString;
    
                string procedure = "listarAlunos";
                SqlCommand command = new SqlCommand(procedure, connection);
    
                command.CommandType = CommandType.StoredProcedure;
    
                connection.Open();
    
                try
                {
                    SqlDataReader dataReader = command.ExecuteReader();
    
                    while (dataReader.Read())
                    {
                        Entidade.Alunos alunos = new School.Entidade.Alunos();
    
                        alunos.CodigoAluno = (int)dataReader["codigoAluno"];
                        alunos.NomeAluno = dataReader["nomeAluno"].ToString();
                        alunos.SobrenomeAluno = dataReader["sobrenomeAluno"].ToString();
                        alunos.IdadeAluno = (int)dataReader["idadeAluno"];
    
                        alunosEntidade.Add(alunos);
                    }
    
                    return alunosEntidade;
                }
    
                catch (SqlException exception)
                {
                    return null;
                    throw exception;
                }
    
                finally
                {
                    connection.Close();
                    connection.Dispose();
                }
            }
        }
    }

    Camada de dados

    <?xml version="1.0"?>
    
    <!--
      For more information on how to configure your ASP.NET application, please visit
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    
    <configuration>
        <system.web>
          <compilation debug="true" targetFramework="4.5" />
          <httpRuntime targetFramework="4.5" />
        </system.web>
    
        <connectionStrings>
          <add name="databaseAlunos" connectionString="Data Source = sourceAlunos; Initial Catalog = databaseAlunos; Persist Security Info = true; User ID = sa; 
               Password = sqlServer" providerName="System.Data.SqlClient"/>
         </connectionStrings>
    
    
    </configuration>
    

    Web.config

    Pessoal se vocês poderem me ajudar eu agradeço, muito pois eu li vários artigos na internet e vi vários exemplos também porém quando aplico ao meu projeto não funciona de maneira nenhuma.

    Atenciosamente

    Anderson Santos

    sexta-feira, 25 de outubro de 2013 09:28

Respostas

  • J.AndersonSantos,

    Você precisa adicionar a Reference a System.Configuration conforme a imagem abaixo:

    Mas, acredito eu, que da camada de dados você não vai conseguir acessar o Web.Config.

    é bem provavel que você tenha que adicionar um app.config na camada de dados para poder fazer isso.


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    • Sugerido como Resposta Julio ArrudaMVP sexta-feira, 25 de outubro de 2013 09:54
    • Marcado como Resposta J.AndersonSantos sexta-feira, 25 de outubro de 2013 11:25
    sexta-feira, 25 de outubro de 2013 09:54
  • J.AndersonSantos,

    Sim, dessa forma te ajudaria.

    Eu suponho que você salve o usuário logado em uma Session para utilizar no decorrer da aplicação caso necessite dele certo?

    Se você tem no usuário a identificação de qual connection string ele deve utilizar é só recuperar da session e tá beleza.



    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    • Sugerido como Resposta Julio ArrudaMVP sexta-feira, 25 de outubro de 2013 10:41
    • Marcado como Resposta J.AndersonSantos sexta-feira, 25 de outubro de 2013 11:24
    sexta-feira, 25 de outubro de 2013 10:41
  • J.AndersonSantos,

    você pode armazenar um objeto na Session

    por exemplo , vc tem um objeto DadosDoUsuario que seriam todos esses dados ai.

    quando vc obter o usuário, você vai ter um objeto deste tipo preenchido, então é só vc inclui-lo na session

    Session["sessaoTeste"] = dadosDoUsuario;

    e quando vc precisar recuperar os dados, é só realizar um cast para o objeto original

    dadosDoUsuario usuarioLogado = (dadosDoUsuario)Session["sessaoTeste"];

    assim seu objeto usuarioLogado vai possuir as mesmas informações contidas na session


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    • Sugerido como Resposta Julio ArrudaMVP sexta-feira, 25 de outubro de 2013 11:18
    • Marcado como Resposta J.AndersonSantos sexta-feira, 25 de outubro de 2013 11:24
    sexta-feira, 25 de outubro de 2013 11:18

Todas as Respostas

  • Na sua camada de dados vc deve ter um arquivo App.config, com o mesmo nome de connectionstring para referencia, adicione o arquivo construa sua string assim como no webconfig e adicione a referencia ao projeto web e pronto.
    • Marcado como Resposta J.AndersonSantos sexta-feira, 25 de outubro de 2013 11:25
    • Não Marcado como Resposta J.AndersonSantos sexta-feira, 25 de outubro de 2013 11:25
    sexta-feira, 25 de outubro de 2013 09:45
  • J.AndersonSantos,

    Você precisa adicionar a Reference a System.Configuration conforme a imagem abaixo:

    Mas, acredito eu, que da camada de dados você não vai conseguir acessar o Web.Config.

    é bem provavel que você tenha que adicionar um app.config na camada de dados para poder fazer isso.


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    • Sugerido como Resposta Julio ArrudaMVP sexta-feira, 25 de outubro de 2013 09:54
    • Marcado como Resposta J.AndersonSantos sexta-feira, 25 de outubro de 2013 11:25
    sexta-feira, 25 de outubro de 2013 09:54
  • Daniel mais no meu caso também faço uma alteração durante a execução do meu sistema mais ou menos assim, eu tenho um banco de dados primário ao qual contém as informações de todos os usuário do meu sistema, uma vez que o usuário tenta logar no sistema ele verifica em que empresa o usuario trabalha e faz a alteração do meu web.Config adicionando na connectionstring a referecia ao banco de dados da empresa que ele trabalha, Neste caso está alteração também será aplicada no meu App.config?
    sexta-feira, 25 de outubro de 2013 09:55
  • J.AndersonSantos,

    Você tem certeza que seu sistema vai fazer isso?

    Cara, imagina eu e você utilizando o sistema eu trabalho na empresa A e vc na empresa B

    Você logou e direcionou para o banco da empresa B e está utilizando o sistema, ai passa alguns minutos, vc lá trabalhando e eu também acesso o sistema, e altero o banco para a empresa A.

    E ai, como vão ficar as suas informações? não irão ficar "incorretas"

    Acredito que você necessite rever essa logica ai cara.


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    • Sugerido como Resposta Julio ArrudaMVP sexta-feira, 25 de outubro de 2013 11:26
    sexta-feira, 25 de outubro de 2013 09:59
  • Sim, porque uma conexão irá apontar para um banco e a outra para outro endendeu, faz isso nas duas que dará certo.
    sexta-feira, 25 de outubro de 2013 10:00
  • Qual a forma que você me sugere então Julio Arruda??? Que eu crie connectionstrings diferentes no meu arquivo web.config??? Eu sou novo em asp.net e principalmente em programação onde irá envolver multiplos clientes.
    • Editado J.AndersonSantos sexta-feira, 25 de outubro de 2013 10:18 Erro digitação
    sexta-feira, 25 de outubro de 2013 10:12
  • J.AndersonSantos,

    Levando em consideração esta regra que vai ocorrer em seu sistema, sim, poderia ser varias connections strings no seu web.config, e você selecionaria de acordo com a empresa qual vc utiliza.

    Agora, SE entendi bem, o usuário vai conectar em uma base generica para qualquer usuário, e apartir desta base que vai falar se o usuario é da empresa A ou B certo?

    se esse for o caso, você pode deixar cadastrado essas conection strings nessa base pai, e quando obter o usuário, obter ela também, e ai você utilizar na aplicação.

    Isso fica a seu critério, as duas opções acredito que funcionaram bem, analise e veja qual é o melhor para você.


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    • Sugerido como Resposta Julio ArrudaMVP sexta-feira, 25 de outubro de 2013 10:18
    sexta-feira, 25 de outubro de 2013 10:18
  • Crie uma classe com suas connectiongstring e aponte para qual você deseja de acordo com o usuário, fica mais fácil do que apontar pra app.config ou webconfig tipo :

    string connectionUsuarioTipo1 = ConfigurationManager......."USER1";

    string connectionUsuarioTipo2 = .................................."USER2";

    ou cria um enum com tipos de usuários.

    sexta-feira, 25 de outubro de 2013 10:23
  • Crie uma classe com suas connectiongstring e aponte para qual você deseja de acordo com o usuário, fica mais fácil do que apontar pra app.config ou webconfig tipo :

    string connectionUsuarioTipo1 = ConfigurationManager......."USER1";

    string connectionUsuarioTipo2 = .................................."USER2";

    ou cria um enum com tipos de usuários.

    ai o banco muda e tem que recompilar o aplicativo...rs

    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    sexta-feira, 25 de outubro de 2013 10:24
  • Dessa forma me ajudaria Julio??? http://devbrasil.net/profiles/blogs/conectando-no-banco-de-dados

    No caso eu teria que recuperar o meu usuário conectado toda vez que eu fosse realizar alguma atividade em meu banco de dados???

    Teria como eu recuperar o ID da empresa do usuario na minha Sessão???

    • Editado J.AndersonSantos sexta-feira, 25 de outubro de 2013 10:40 Imagens [para auxiliar
    • Marcado como Resposta J.AndersonSantos sexta-feira, 25 de outubro de 2013 11:25
    • Não Marcado como Resposta J.AndersonSantos sexta-feira, 25 de outubro de 2013 11:25
    sexta-feira, 25 de outubro de 2013 10:36
  • J.AndersonSantos,

    Sim, dessa forma te ajudaria.

    Eu suponho que você salve o usuário logado em uma Session para utilizar no decorrer da aplicação caso necessite dele certo?

    Se você tem no usuário a identificação de qual connection string ele deve utilizar é só recuperar da session e tá beleza.



    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    • Sugerido como Resposta Julio ArrudaMVP sexta-feira, 25 de outubro de 2013 10:41
    • Marcado como Resposta J.AndersonSantos sexta-feira, 25 de outubro de 2013 11:24
    sexta-feira, 25 de outubro de 2013 10:41
  • Julio Arruda apenas mais uma informação para fechar o post eu já estou armazenando em minha sessão o meu nome de usuário seria possível também eu armazenar o id da empresa ao qual o usuário faz parte, pois se não como eu teria que fazer para recuperar esse id depois, toda vez consultar minha base genérica??? Na minha base genérica tenho informações como por exemplo idUsuario, idEmpresa, nomeExibicaoUsuario, nomeUsuario, senhaUsuario eu estou armazenando na minha sessão o nomeExibicaoUsuario para mostrar nas telas do meu sistema, como se fosse o hotmail mesmo. Teria como armazenar mais informações na seção?

    Fico no aguardo para finalizar o post.

    sexta-feira, 25 de outubro de 2013 11:11
  • J.AndersonSantos,

    você pode armazenar um objeto na Session

    por exemplo , vc tem um objeto DadosDoUsuario que seriam todos esses dados ai.

    quando vc obter o usuário, você vai ter um objeto deste tipo preenchido, então é só vc inclui-lo na session

    Session["sessaoTeste"] = dadosDoUsuario;

    e quando vc precisar recuperar os dados, é só realizar um cast para o objeto original

    dadosDoUsuario usuarioLogado = (dadosDoUsuario)Session["sessaoTeste"];

    assim seu objeto usuarioLogado vai possuir as mesmas informações contidas na session


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    • Sugerido como Resposta Julio ArrudaMVP sexta-feira, 25 de outubro de 2013 11:18
    • Marcado como Resposta J.AndersonSantos sexta-feira, 25 de outubro de 2013 11:24
    sexta-feira, 25 de outubro de 2013 11:18
  • Valeu pela força Julio... Muito obrigado foi de grande proveito todas as informações passadas por você, principalmente que você evitou que eu cometesse um grande erro.

    Valeu mesmo

    Anderson Santos

    sexta-feira, 25 de outubro de 2013 11:24