簡體   English   中英

基於位置的連接字符串(c#+ asp.net)

[英]Connection string based on location (c# + asp.net)

我的應用程序中有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這應該得到我想要的值...

我不想在連接部分中做,因為想確保不會弄亂生產服務器,因為我在同一個網絡中……我可以完成整個發布項目,但這太過麻煩了。

除非您對SqlDataSource所在的容器進行數據綁定,否則<%# %>語法將不起作用(因為這是綁定語法,並且該屬性從未綁定),所以您的問題是ConnectionString屬性只是未設置完全沒有

我將在后面的代碼中進行設置,或者使用完全不同的配置進行生產。 對於后面的代碼:

SqlDataSource1.ConnectionString = DBConnections.DefaultConnection;

另一個選擇是,如果您在大量地方使用相同的連接,只需創建一個從SqlDataSource繼承並覆蓋ConnectionString屬性的控件,僅在該getter / setter中進行設置,然后在各處使用該控件即可。

就像是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM