如何在 asp.net 的对象数据源中动态更改连接字符串?
kedar kamthe
问问题
2667 次
3 回答
4
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);
}
}
我希望它有所帮助。
于 2008-12-13T04:40:23.823 回答
2
我没有让上述工作,但这样做:
if (e.ObjectInstance != null)
{
((ReportPrototype.ReleasedRatingsDataTableAdapters.RatingsViewTableAdapter)e.ObjectInstance).Connection.ConnectionString = ConfigurationManager.ConnectionStrings["RADSDataConnectionString"].ConnectionString;
}
ObjectInstance 是表适配器,在我的例子中是绑定到 ObjectDataSource 的类型。
于 2010-01-06T18:01:54.960 回答
0
这是一种适用于所有生成的表适配器的方法,使用反射:
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;
}
}
请注意,Microsoft 生成的 Connection 属性是作为内部创建的(在我的 VS 2013 上),因此您需要将 BindingFlags.NonPublic 提供给 GetProperty。
当然,以一种或另一种方式连接 ObjectCreated 事件:
ObjectDataSource ObjectDataSource1 = new ObjectDataSource();
...
ObjectDataSource1.ObjectCreated += OnObjectDataSourceObjectCreated;
于 2014-12-04T21:42:22.800 回答