Строка подключения в зависимости от местоположения (c # + asp.net) - PullRequest
0 голосов
/ 23 февраля 2010

В моем приложении 3 строки подключения:

<add name="DBConnectionString" connectionString=""/>
<add name="ADConnectionString" connectionString="" /> 
<add name="TestDBConnectionString" connectionString="" />

теперь в коде я делаю:

    public static string DefaultConnection
    {
        get
        {
            // this is used so that there will be no chance of modifing the original data when testing locally
            if (HttpContext.Current.Server.MachineName == "xxx")
                return ConfigurationManager.ConnectionStrings["TestDBConnectionString"].ConnectionString;
            else
                return ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
        }
    }

и это работает в коде позади, но когда я делаю обычный SqlDataSource, а затем мне нравится это:

  <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%# DBConnections.DefaultConnection %>" />

Я получаю: Свойство ConnectionString не было инициализировано. Что я делаю неправильно? AFAIK это должно получить значение, которое я хочу ...

Я не хочу делать в разделе подключений, как Я ХОЧУ УБЕДИТЬСЯ , что я не испортил рабочий сервер, так как я в той же сети ... весь издательский проект, но это ваааааааааааае слишком много работы.

1 Ответ

2 голосов
/ 23 февраля 2010

Если вы не привязываете данные к контейнеру, в котором находится SqlDataSource, синтаксис <%# %> не будет работать (поскольку это синтаксис привязки, а свойство никогда не привязывается), поэтому ваша проблема в том, что свойство ConnectionString просто не получает установить на всех.

Я бы установил это в codebehind, или, в качестве альтернативы, имел бы совершенно другую конфигурацию для производства. Для кода:

SqlDataSource1.ConnectionString = DBConnections.DefaultConnection;

Еще одна опция: если вы используете одно и то же соединение в сотнях мест, просто создайте элемент управления, который наследуется от SqlDataSource, и переопределите свойство ConnectionString, установите его только в этом методе getter / setter и просто используйте этот элемент управления везде. 1007 *

Что-то вроде:

public class MySqlDataSource : SqlDataSource
{
  public string _customConnectionStr; //Allow a custom connection still
  public override string ConnectionString {
    //Default the connection if a custom isn't set
    get { return _customConnectionStr  ?? DBConnections.DefaultConnection; }
    set { _customConnectionStr = value; } 
  }
}
...