Using Web.Configuration Transformation for Database ConnectionString in ASP.NET
Introduction
Usually, in web application development process (on development
server) developer write his local database connection string in Web.config file
and at the time of deployment (on production server) he manually edit the
Web.config file to map the databases. But in Visual Studio 2010 we have a brand
new feature that is known as Web.config transformation feature. In this article
we are going look at simple demonstration on configuration transformations.
Here you go.
Demonstration
Create a new project by clicking File > New > Project >
ASP.NET Web Application on your desktop.
When you done you can see, by default there are two files with
Web.config:-
Web.Debug.config
This transformation environment is used by development server
(called as debug).
Web.Release.config
This transformation environment will be used by production
server (called as release).
How to add new Transformation configuration file
To add new transformation configuration file in project, follow
the steps given below.
Step 1
In Visual Studio 2010, click on Build > Configuration
Manager... it will pop a window.
Step 2
In the new window, click on drop down list box and click on
'New' there, it will also pop a new window asking for a name, type the name and
click on ok button, find the screen below.
When you done, right click on Web.config file and click on 'Add
Config Transformations' option.
Now you can see we have three transformation configuration file
in list.
In case you can't see your new transformation file or get any
error, then fix it by clicking on 'Show All Files' option and there may be some
temp file having same name.
To delete 'Web.Testing.config' file, you need to follow the step
directed in step2 and select 'Edit' option instead of 'New' and also delete
that file from 'Solution Explorer'.
Web.config File
This is our target file that will be modified when we deploy our
web application. Here is my local (development server) configuration stetting,
which is normal and most web developer is aware:
<connectionStrings>
<add name="Database1ConnectionString1" connectionString="Data
Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated
Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
In above piece of code, we need to change the connectionString
values so that we host our database or say map or database on hosting server
(production server) too.
Web.Release.config File
The following connectionString will map my database on
production server:
connectionString="Data Source=ip_address_or_localhost;Initial
Catalog=yourdatabasefilename;Persist Security Info=True;User
ID=yourdbusername;Password=yourdbuserpassword"
Now, look at my 'Web.Release.config' file (code given below),
which has magical codes to perform such action. In the code given below, to
update connectionStrings we need to place the logical code inside
<conectionStrings> tag. Now, we are adding some properties in <add
/> tag that will perform our target action. xdt:Locator="Match(name)"
will match the node by name, xdt:Transform="Replace" will modify the
data by replacing it. 'name' attribute contains the target name value that is
"Database1ConnectionString1" in my case and connectionString contain
the value which will be replaced. Here is the code:
<connectionStrings>
<add xdt:Locator="Match(name)" xdt:Transform="Replace" name="Database1ConnectionString1" connectionString="Data
Source=ip_address_or_localhost;Initial Catalog=yourdatabasefilename;Persist
Security Info=True;User ID=yourdbusername;Password=yourdbuserpassword"/>
</connectionStrings>
To understand above codes, we should first take a look at some
abbreviations.
Transform
This attribute informs the transformation engine the way to
modify web.config file for specific configuration. Transforms can do following
things for us:
* Replacing a node
* Inserting a node
* Delete a node
* Removing Attributes
* Setting Attributes
Locator
This attribute helps the Transformation engine to exactly
pin-point the web.config node that the transform from web.Release.config should
be applied to. Locators can do are:
* Match on value of a node's attribute
* Exact XPath of where to find a node
* A condition match to find a node
When you done with above all, publish the application locally
and test its Web.config file's connectionString value, you can see it is
changed.
I have opened my published Web.config file in notepad here
I hope you like this post. Please post your comments and
feedbacks.






Comments
Post a Comment