Every time I try to run a unit test with some test methods, I get a NullReferenceException at the first line of the following :
public DB()
{
this.sqlConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
this.con = new SqlConnection(this.sqlConnectionString);
this.con.StateChange += new StateChangeEventHandler(this.Connection_StateChange);
}
After further research I realized I should add an app.config file to my test project.
I have no clue what to do with it or what it's used for, though.
Tips on how to proceed?
You need to add a new Connection String section in your app.config with the name ConnectionString (Since that is what you're referencing in your C# code):
<configuration>
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=YourDataSource;Initial Catalog=YourDatabase;IntegratedSecurity=True" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
You will also need to change the actual connectionString value in the app.config file.
Related
Connection string not found i have tried multiple ways but all goes in vein, i have a data access layer project in app.config i have mention connection string
</configuration>
<connectionStrings>
<add name="MySqlConnectionString" connectionString="server=myserver;User Id=myuser;password=mypassword;database=mydatabase"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</configuration>
C# Code
public void ConnectionString()
{
try
{
var connectionString = ConfigurationManager.ConnectionStrings["MySqlConnectionString"].ConnectionString; //does not work
var connectionString2 = ConfigurationManager.AppSettings["MySqlConnectionString"];//does not work
}
catch(Exception ex)
{
}
}
What am doing wrong i have try multiple solution it does not work for me
ConnectionString Not Found
Your connection string name is Default. And you should consider this detail when you want to read it. Try like this;
public void ConnectionString()
{
try
{
var connectionString = ConfigurationManager.ConnectionStrings["Default"].ConnectionString;
}
catch(Exception ex)
{
}
}
Or you can change connection string name as you wish;
</configuration>
<connectionStrings>
<add name="MySqlConnectionString" connectionString="server=myserver;User Id=myuser;password=mypassword;database=mydatabase"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</configuration>
From the picture I can see an "app.config" and a "web.config", so I presume there are different projects. Am I right? If it is, you have to add the connectionString on the execution project (if it is a web site, or a standalone, or whatever it is).
The code you were using is correct
var connectionString = ConfigurationManager.ConnectionStrings["MySqlConnectionString"].ConnectionString;
It has to work correctly.
Thanks Every one for helping my the main issue was i have added connectionstring attribute in the wrong place
Wrong place
<runtime>
<connectionStrings>
<add name="MySqlConnectionString" connectionString="server=myserver;User Id=myuser;password=mypassword;database=mydatabse"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</runtime>
</configuration>
Right place i have cut the connection string under the runtime attribute and paste it alone and the issue is solved
<connectionStrings>
<add name="MySqlConnectionString" connectionString="server=myserver;User Id=myuser;password=mypassword;database=mydatabse"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
Thanks everyone
I'm trying to create an ASP.NET website. There I'm using a database. To connect with the database I'm using the connectionstring which I've stored in the web.config file like
<connectionStrings>
<add name="DBConnectionString"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=G:\CarRentalServices\App_Data\CarRentalServiceDB.mdf;Integrated Security=True"/>
</connectionStrings>
and at code behind
private string _connectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
So you can see the database is stored at G:\path\to\db\CarRentalServiceDB.mdf.
But now if my friend want to take the project from me and try to run the project from his machine then he has to change the connectionString at web.config. Say the website is now at D:\path\to\db\foo\CarRentalServiceDB.mdf in my friend's machine, then the connectionString needs to change. Isn't it tedious?
Is there any way to change the connectionString dynamically with any batch file or code so that it will change with respect to the current directory it is residing now?
You shoud use the |DataDirectory| token: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx
<connectionStrings>
<add name="DBConnectionString"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\App_Data\CarRentalServiceDB.mdf;Integrated Security=True"/>
You would add multiple connections strings in your web.config file and call the one you need like
Web.config File
<connectionStrings>
<add name="DBConnectionString"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=G:\CarRentalServices\App_Data\CarRentalServiceDB.mdf;Integrated Security=True"/>
<add name="DBConnectionStringTwo"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\path\to\db\foo\CarRentalServiceDB.mdf;Integrated Security=True"/>
</connectionStrings>
Code for connection strings
//Connection String 1
private string _connectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
//Connection String 2
private string _connectionString2 = ConfigurationManager.ConnectionStrings["DBConnectionStringTwo"].ConnectionString;
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?
you need to add connection string key into Test project's config as well.
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.
My current c# windows form application is using the following code to connect to a database to retrieve information and the it is stored at Setting.cs
public static String connectionString ="Data Source=####; Initial Catalog=###; User ID=####; Password='####'";
I have written out an external Connection.config file and the content would be :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Connection" providerName="System.Data.providername"
connectionString="Data Source=####; Initial Catalog=###; User ID=###; Password='####!';" />
</connectionStrings>
</configuration>
is the above code written correctly? as I sort of just copied and paste online and editted the connection string part as i do not know what does the "add name" and providerName part does.
what i would like to ask is where should i write the code in my forms to read the connection string from my external config file so i can remove the one in my setting.cs file.
thank you.
don mind the ### as it is just replaced by me to represent the information.
You can use config source to split your config files. Example App/web.config:
<connectionStrings configSource="myExternalConfigSource.xml" />
External Config:
<connectionStrings>
<add name="Connection" providerName="System.Data.providername"
connectionString="Data Source=####; Initial Catalog=###; User ID=###; />
</connectionStrings>
More info: http://www.nikhilk.net/Entry.aspx?id=158
If you use this method, you can reference your config as normal and still have your configuration split out into seperate files.
Add the following in your web.config file right at the bottom above the closing config tag.
<connectionStrings>
<add connectionString="Data Source=Servernamegoeshere;Initial Catalog=databasenamehere;Persist Security Info=True;User ID=***;Password=***" name="nameyouwanttogivethisconnection" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
To reference the connection on the page load of the main form use this:
public void Page_Load(object sender, EventArgs e)
{
string connectionString = ConfigurationManager.ConnectionStrings["nameyouwanttogivethisconnection"].ConnectionString;
SqlConnection SqlConnection = new SqlConnection(connectionString);
SqlCommand SqlCommand = new SqlCommand("update table etc etc....",SqlConnection);
SqlConnection.Open();
SqlCommand.ExecuteNonQuery(); //This line is for updates and inserts, use SqlCommand.ExecuteReader(CommandBehavior.CloseConnection); for select statments
SqlConnection.Close();
}
Make sure you add these references to the top of the page you are using this code on:
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
You may then use that connection to create a Sqlcommand to run against your database.
we use:
<configuration>
<appSettings>
<add key="connection.string" value="Initial Catalog=XXX;server=localhost;User=YYY;Password=ZZZ;" />
</appSettings>
</configuration>
and then just:
ConfigurationManager.AppSettings["connection.string"];
You could also use ApplicationSettings, and forget about writing information in config files manually (It will be done automatically)
Right click on your project in solution explorer and select Properties.
Go to Settings tab.
Click on the link to create the settings file. (It will be called Settings.settings)
For Name, type the name you want to use for the connection string. (i.e. ConnectionString)
For Type, select Connection String
For Scope, select Application
For Value paste your connection string.
When you want to use it, just type
Application.Settings.Default.ConnectionString
i.e
SqlConnection connection = new SqlConnection(Application.Settings.Default.ConnectionString);
If I have several pages what would be the correct procedure in creating a connection string variable and sharing it among all of my pages. I would prefer not to type the connection string 100 times for each page and would just rather call it. Can I create it in my namespace or whats the best approach?
Put the connection string in the web.config file. See the following on MSDN: How to: Read Connection Strings from the Web.config File
Example of connection string in config:
<connectionStrings>
<add name="Movies2"
connectionString="Data Source=(local);Initial Catalog=Movies;User ID=wt3movies;Password=lalalalala;Integrated Security=SSPI"
providerName="System.Data.SqlClient" />
</connectionStrings>
Using the string:
string connStr = ConfigurationManager.ConnectionStrings["Movies2"].ConnectionString;
It's typically in your configuration file (web.config)
can't you use the <connectionStrings/> configuration ?
http://msdn.microsoft.com/en-us/library/ms178411.aspx
Well i would have included Setting file and placed it over there.It may be not the best bet but works for me.
There are many options. It depends on what data access methodology you are using. I would suggest creating a class to handle loading the connection string from the web.config file and exposing it as a public property.
There are a variety of ways to approach this which would delve in to architecture/SOC/IoC/Repository/ etc, but to answer your question in its simplest possible sense, you could create a Database class that had a single method that fetched your connection string from configuration.
internal class DataAccess
{
static string GetDatabaseConnection()
{
return ConfigurationManager.ConnectionStrings["AppDb"].ConnectionString;
// where AppDb is defined in your web.config/app.config.
}
}
Your pages could just use:
string connection = DataAccess.GetDatabaseConnection();
connection strings are usually stored in configuration files such as the web config. Here is a simple example
add something like this to the config
<connectionStrings>
<add
name="NorthwindConnectionString"
connectionString="Data Source=serverName;Initial
Catalog=Northwind;Persist Security Info=True;User
ID=userName;Password=password"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
and then retrive it as
System.Configuration.Configuration rootWebConfig =
S
ystem.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/MyWebSiteRoot");
System.Configuration.ConnectionStringSettings connString;
if (rootWebConfig.ConnectionStrings.ConnectionStrings.Count > 0)
{
connString =
rootWebConfig.ConnectionStrings.ConnectionStrings["NorthwindConnectionString"];
if (connString != null)
Console.WriteLine("Northwind connection string = \"{0}\"",
connString.ConnectionString);
else
Console.WriteLine("No Northwind connection string");
}
full article is here http://msdn.microsoft.com/en-us/library/ms178411.aspx
You should keep it in you config file. For winforms that will be app.config, and for webforms it's web.config. Here is the section you need to have (for winforms).
<connectionStrings>
<add name="MyNameSpace.Properties.Settings.ConnectionString1"
connectionString="Data Source=MYSQLSERVER;Initial Catalog=DATABASENAME;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
Then you can access the connection string like this (depending on your .NET version - this is for 2.0)
string connectionString = ((string)(configurationAppSettings.GetValue(ConnectionString1"", typeof(string))));
Have the connection string (CS) in (App/Web).Config file and have the CS returned from a static method GetConncectionString().It means, this particular static method would be used in all the pages where CS is required.
You can also make a file called connectionStrings.config,or a name you choose, with this content:
<connectionStrings>
<add name="MyConnection" connectionString="server=MyServer; database=MyDataBase; user id=myUser; pwd=MyPwd;"/>
</connectionStrings>
And then, in your Web.Config
Insert this tag under node
<connectionStrings configSource="connectionStrings.config"/>