I’m a fan of the Open Source project SubSonic, spearheaded by Rob Conery of Microsoft, which describes itself thusly:
A Super High-fidelity Batman Utility Belt. SubSonic works up your DAL for you, throws in some much-needed utility functions, and generally speeds along your dev cycle.
I’ve seen a few questions on the Internet about setting the SubSonic connectionstring at runtime and thought I’d post what I’ve done. SubSonic includes a tool to generate a DAL for you which picks up settings from your .config file which provides the connectionstring among other things. I’m using SubSonic in a plugin to CruiseControl.NET for EDI processing and here the portion of my ccservice.exe.config file related to SubSonic:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic"
requirePermission="false"/>
</configSections>
<connectionStrings>
<add name="Velocity2"
connectionString="Data Source=db;Initial Catalog=db;Persist Security Info=True;"
providerName="System.Data.SqlClient" />
</connectionStrings>
<SubSonicService defaultProvider="Velocity">
<providers>
<clear/>
<add name="Velocity"
type="Subsonic.SqlDataProvider, SubSonic"
connectionStringName="Velocity2"
generatedNamespace="VelocitySubSonic"
includeTableList="AR_*,CORE_*,EDI_*,II_*,IN_*,SA_*"
excludeProcedureList="WMS_InsertImportQueue"
/>
</providers>
</SubSonicService>
...
One of the things I wanted to do is override the connectionstring using a property on my CCNET plugin. To do that I implemented a property like this:
[ReflectorProperty("connectionString")]
public string ConnectionString
{
get { return m_connectionstring; }
set
{
m_connectionstring = value;
SubSonic.DataService.GetInstance("Velocity").SetDefaultConnectionString(value);
}
}
The instance name comes from the name used in the config file above then simply call SetDefaultConnectionString and voila the SubSonic connectionstring is now set at runtime.