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

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

Ответы [ 3 ]

4 голосов
/ 13 декабря 2008
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);
    }
}

Надеюсь, это поможет.

1 голос
/ 06 января 2010

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

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

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

0 голосов
/ 05 декабря 2014

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

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...