Roel
Roel

Reputation: 764

Reading a connection string from a class library

I am currently struggling to read a connection string from the App.config inside my WinForms application from my Class Library (and Unit Testing).

I added a 'test' entry to the App.config;

<connectionStrings>
     <add name="MyConnString" connectionString="Test;" />
</connectionStrings>

My TestMethod looks like this;

    [TestMethod]
    public void TestConnection1()
    {
        string connString = "";

        if (ConfigurationManager.ConnectionStrings["MyConnString"] != null)
        {
            connString = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;
        }

        string expected = "Test;";
        string actual = connString;

        Assert.AreEqual(expected, actual);
    }

This, obviously, fails. Actual's value is empty. What am I doing wrong?

enter image description here

Upvotes: 1

Views: 2853

Answers (2)

bap42
bap42

Reputation: 11

Regarding your comment to DJ Kraze: "@DJ KRAZE, If I put 0 as index, it returns me a connectionstring for SQLExpress "aspnetdb.mdf". If I put 1 as index, I get an exception (IndexOutOfRangeException), so obviously my string is not found."

The problem is you forgot the configuration element. For example:

Referenced from MSDN: Storing and Retrieving Connection Strings

<?xml version='1.0' encoding='utf-8'?>
  <configuration>
    <connectionStrings>
      <clear />
      <add name="Name" 
       providerName="System.Data.ProviderName" 
       connectionString="Valid Connection String;" />
    </connectionStrings>
  </configuration>

The machine.config file also contains a <connectionStrings> section, which contains connection strings used by Visual Studio. When retrieving connection strings by provider name from the app.config file in a Windows application, the connection strings in machine.config get loaded first, and then the entries from app.config. Adding clear immediately after the connectionStrings element removes all inherited references from the data structure in memory, so that only the connection strings defined in the local app.config file are considered.

Upvotes: 1

indiPy
indiPy

Reputation: 8062

you need to add connection string key into Test project's config as well.

Upvotes: 1

Related Questions