none
usar string de conexão de uma class library RRS feed

  • Pergunta

  • pessoal, boa tarde.

    estou desenvolvendo um projeto que contem uma DLL onde eu informo a minha string de conexão através de uma proprieade somente leitura, que obtem essa conexão do appconfing.. no meu projeto Windows Form eu referencio essa DLL utilizo essa classe para obter o dados dessa conexão, mas está dando um erro de objeto nulo.. o que devo fazer?

    quinta-feira, 12 de fevereiro de 2015 20:38

Respostas

  • kngipa,

    Isto é uma característica do próprio .NET. Mesmo em dlls de frameworks disponibilizados pela própria Microsoft acontece isso. Em termos práticos, as configurações assumidas são aquelas da aplicação que se está executando (no seu caso o Windows Forms), com as dlls dos quais a mesma dependem "herdando" suas configurações.

    Um exemplo seria uma projeto que faz uso do Entity Framework. Caso vc criasse uma camada de acesso a dados que fosse uma Class Library, inicialmente o app.config desta dll teria as configurações do banco alvo. Mas ao consumir esta dll em um projeto ASP.NET, as configurações de acesso a dados deveriam ser portadas para o Web.config do site correspondente (do contrário, vc enfrentaria o mesmo erro reportado no início desta discussão).

    Bem, espero ter ajudado com isto.

    Abs

    • Marcado como Resposta kngipa sexta-feira, 13 de fevereiro de 2015 11:41
    • Não Marcado como Resposta kngipa sexta-feira, 13 de fevereiro de 2015 11:42
    • Marcado como Resposta kngipa sexta-feira, 13 de fevereiro de 2015 12:40
    sexta-feira, 13 de fevereiro de 2015 11:36

Todas as Respostas

  • Esse string é para conectar em que tipo de servico, um banco de dados?
    quinta-feira, 12 de fevereiro de 2015 22:38
  • kngipa,

    Provavelmente vc informou a string de conexão no app.config da Class Library, mas não fez o mesmo no seu projeto Windows Forms.

    Se realmente isto aconteceu, tente copiar o trecho que contém esta configuração para o app.config do sistema em Windows Forms e verificar assim se o problema é resolvido.

    Abs

    • Sugerido como Resposta Romy Moura quinta-feira, 12 de fevereiro de 2015 23:26
    quinta-feira, 12 de fevereiro de 2015 22:58
  • sim.. para conectar a um banco de dados
    quinta-feira, 12 de fevereiro de 2015 23:16
  • minha class library tem uma classe chamada Global, essa classe tem uma propriedade chamada Cnn.. nessa classe eu já defino o valor dessa propriedade com o valor da string de conexao presente no app.config...

    no meu projeto (principal) onde referencio essa dll.. eu tenho um formulário que faz a instância dessa classe Global, e já nesse momento, quando estou dando o New Global e vou nessa classe sentando as variáveis/propriedades, já acontece o erro..

    a intenção é seja usado a string de conexão dessa classe Global, não reescrever esse trecho de código no app.config do meu projeto principal..

    deu pra entender? rs....

    quinta-feira, 12 de fevereiro de 2015 23:27
  • kngipa,

    O erro que acontece é na classe Global? Se for, teria como vc postar o código para analisarmos por aqui?

    Abs

    quinta-feira, 12 de fevereiro de 2015 23:34
  • sim..

    o erro acontece na classe Global da minha DLL

    private string sCnn = ConfigurationManager.ConnectionString["nome"].ToString()

    public string pCnn{

    get {return sCnn;}

    }

    o erro já acontece na linha em negrito (talvez essa sintaxe ai esteja errada, pq estou digitando na mão, não estou com o código aqui, mas não ocorre erro de sintaxe quando compilo)

    quinta-feira, 12 de fevereiro de 2015 23:56
  • Tente:

    private string sCnn = ConfigurationManager.ConnectionStrings["nome"].ConnectionString;

    Além disso, é necessário se certificar de que existe a connection string "nome" no app.config do projeto Windows Forms.

    Abs

    sexta-feira, 13 de fevereiro de 2015 03:37
  • olá, bom dia.. vou verificar como está essa linha de código realmente..

    de todo modo, mesmo a minha classe onde defino essa conexão pertencer ao projeto da DLL, preciso ter essa informação no app.config do windows form? 

    sexta-feira, 13 de fevereiro de 2015 08:43
  • esse é meu app.config na DLL

      <connectionStrings>
        <add name="cnn"  connectionString="Provider=SQLOLEDB;Server=xxxx; Database=aaaa; Uid=yyy; Pwd=zzzz"/>
      </connectionStrings>

    na minha DLL tenho uma classe chamada Global, com essa propriedade pública

            string sCnn = ConfigurationManager.ConnectionStrings["cnn"].ConnectionString.ToString();
            public string pCnn
            {
                get { return sCnn; }
            }

    depois de referenciar essa dll no meu projeto, faz a instância

    cGlobal oGlobal = new cGlobal();
    o erro ocorre nesse new.. quando chega na linha em negrito

    sexta-feira, 13 de fevereiro de 2015 10:48
  • Certo kngipa. 

    E como está o app.config no seu Windows Forms? Acredito que o mesmo esteja sem o trecho abaixo, o que está ocasionando o erro:

    <connectionStrings>
        <add name="cnn"  connectionString="Provider=SQLOLEDB;Server=xxxx; Database=aaaa; Uid=yyy; Pwd=zzzz"/>
      </connectionStrings>

    • Sugerido como Resposta Renato GroffeMVP sexta-feira, 13 de fevereiro de 2015 11:36
    sexta-feira, 13 de fevereiro de 2015 11:08
  • O nome de sua conexão é "cnn" e não "nome", testa assim:
    private string sCnn = ConfigurationManager.ConnectionStrings["cnn"].ConnectionString;
    Se o erro persistir poste extamente o erro que ocorre ou tira um print

    • Editado Mr. GMSOFT sexta-feira, 13 de fevereiro de 2015 11:19
    sexta-feira, 13 de fevereiro de 2015 11:18
  • não estava errado  no código, foram só exemplos aqui..

    a questão é que tenho que adicionar mesmo a minha conexão no meu projeto principal.. Quando eu executo a linha onde pego esse valor, pra mim como estou na DLL deveria pegar a informação no app.config da DLL, e não buscar essa informação no projeto que está executando a DLL. Eu adicionei a stringconexão no meu projeto principal e funcionou, mas existe uma forma de buscar essa informação direto do app.config da DLL?


    • Editado kngipa sexta-feira, 13 de fevereiro de 2015 11:29
    sexta-feira, 13 de fevereiro de 2015 11:27
  • Cara eu uso exatamente dll para fazer isso e não tenho nenhum problema,claro que vai depender da forma que você declarou essa variável no sistema, usando o configurationManager os valores são extraídos do app.config e não da dll
    sexta-feira, 13 de fevereiro de 2015 11:30
  • kngipa,

    Isto é uma característica do próprio .NET. Mesmo em dlls de frameworks disponibilizados pela própria Microsoft acontece isso. Em termos práticos, as configurações assumidas são aquelas da aplicação que se está executando (no seu caso o Windows Forms), com as dlls dos quais a mesma dependem "herdando" suas configurações.

    Um exemplo seria uma projeto que faz uso do Entity Framework. Caso vc criasse uma camada de acesso a dados que fosse uma Class Library, inicialmente o app.config desta dll teria as configurações do banco alvo. Mas ao consumir esta dll em um projeto ASP.NET, as configurações de acesso a dados deveriam ser portadas para o Web.config do site correspondente (do contrário, vc enfrentaria o mesmo erro reportado no início desta discussão).

    Bem, espero ter ajudado com isto.

    Abs

    • Marcado como Resposta kngipa sexta-feira, 13 de fevereiro de 2015 11:41
    • Não Marcado como Resposta kngipa sexta-feira, 13 de fevereiro de 2015 11:42
    • Marcado como Resposta kngipa sexta-feira, 13 de fevereiro de 2015 12:40
    sexta-feira, 13 de fevereiro de 2015 11:36
  • Mr GMSOFT, como você faz então para extrair a informação do app.config da DLL no seu projeto (windows form) por exemplo?

    eu gostaria de fazer dessa forma, se você consegue pode me mostrar?

    sexta-feira, 13 de fevereiro de 2015 11:42
  • É como Renato Groffe comentou, na minha aplicação eu usei o configurationManager que pega do app.config, agora se você quer manter dentro da DLL(não recomendavel) cria uma função com o valor estatico da conexao, mais se for WEB não vai funcionar pois a conexão é obtida atraves do Web.config.
    • Editado Mr. GMSOFT sexta-feira, 13 de fevereiro de 2015 11:51
    sexta-feira, 13 de fevereiro de 2015 11:50