Reputation: 8188
how to change connection string dynamically in object datasource in asp.net ?
Upvotes: 0
Views: 2777
Reputation: 1356
Here's an approach that will work for all generated table adapters, using reflection:
void OnObjectDataSourceObjectCreated(object sender, ObjectDataSourceEventArgs e)
{
if (e.ObjectInstance != null)
{
((SqlConnection)e.ObjectInstance.GetType()
.GetProperty("Connection", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance )
.GetValue(e.ObjectInstance, null)
).ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
}
}
Note that the Connection property Microsoft generates is created as internal (on my VS 2013), so you need to give BindingFlags.NonPublic to GetProperty.
And of course, wire up the ObjectCreated event one way or another:
ObjectDataSource ObjectDataSource1 = new ObjectDataSource();
...
ObjectDataSource1.ObjectCreated += OnObjectDataSourceObjectCreated;
Upvotes: 0
Reputation:
I didn't get the above to work but this did:
if (e.ObjectInstance != null)
{
((ReportPrototype.ReleasedRatingsDataTableAdapters.RatingsViewTableAdapter)e.ObjectInstance).Connection.ConnectionString = ConfigurationManager.ConnectionStrings["RADSDataConnectionString"].ConnectionString;
}
ObjectInstance is the table adapter which in my case was the type bound to the ObjectDataSource.
Upvotes: 2
Reputation: 81821
protected void ObjectDataSource1_ObjectCreated(object sender, ObjectDataSourceEventArgs e)
{
if (e.ObjectInstance != null)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = MyConnectionManager.ConnectionString;
e.ObjectInstance.GetType().GetProperty("Connection").SetValue(e.ObjectInstance, conn, null);
}
}
I hope it helps.
Upvotes: 4