Как динамически изменить строку подключения в источнике данных объекта в asp.net?

Как динамически изменить строку подключения в источнике данных объекта в asp.net?

13.12.2008 04:37:37
3 ОТВЕТА
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);
    }
}

Я надеюсь, что это помогает.

4
13.12.2008 04:40:23

Я не получил вышеупомянутое, чтобы работать, но это сделало:

  if (e.ObjectInstance != null)
  {
    ((ReportPrototype.ReleasedRatingsDataTableAdapters.RatingsViewTableAdapter)e.ObjectInstance).Connection.ConnectionString = ConfigurationManager.ConnectionStrings["RADSDataConnectionString"].ConnectionString;
  }

ObjectInstance - это адаптер таблицы, который в моем случае был типом, связанным с ObjectDataSource.

1
6.01.2010 18:01:54
Поздний комментарий: я не смог заставить принятый ответ работать, так как я получаю нулевую ссылку на результаты GetProperty("Connection"), но эта техника постоянно работает для меня в ASP.NET 4.
jbeldock 21.11.2013 22:13:40

Вот подход, который будет работать для всех сгенерированных адаптеров таблиц, используя отражение:

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;
    }
}

Обратите внимание, что свойство Connection, которое генерирует Microsoft, создается как внутреннее (на моем VS 2013), поэтому вам нужно передать BindingFlags.NonPublic в GetProperty.

И, конечно, так или иначе, подключите событие ObjectCreated:

ObjectDataSource ObjectDataSource1 = new ObjectDataSource();
...
ObjectDataSource1.ObjectCreated += OnObjectDataSourceObjectCreated;
0
4.12.2014 21:42:22