【问题标题】:Connection string based on location (c# + asp.net)基于位置的连接字符串(c# + asp.net)
【发布时间】:2010-02-23 12:22:54
【问题描述】:

我的应用中有 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 这应该得到我想要的价值......

我不想在连接部分这样做,因为 我想确定我不会弄乱生产服务器,因为我在同一个网络中......我可以整个发布项目,但那是 waaaaaaaaaaaay 太多的工作。

【问题讨论】:

  • 只是为了检查:您的 name="DBConnectionString" connectionString="" 中实际上有一个连接字符串?这些在您的 web.config 的哪个部分?
  • 好吧... 1. 我不会给你看我的连接字符串 2. 这没关系

标签: c# asp.net web-config connection-string


【解决方案1】:

除非您对 SqlDataSource 所在的容器进行数据绑定,否则 &lt;%# %&gt; 语法将不起作用(因为这是绑定语法,并且该属性永远不会绑定),所以您的问题是 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; } 
  }
}

【讨论】:

  • 是的,但是我得到了语法错误......等等......我应该如何设置该类的前缀和内容?
  • @argh - 您可以在 web.config 中为所有页面添加一次,例如 MySqlDataSourceWeb.Controls 命名空间中,您的网站编译为 Web.dll,然后在 &lt;system.web&gt;&lt;pages&gt;&lt;controls&gt; 下在 web.config 中添加:&lt;add tagPrefix="Custom" namespace="Web.Controls" assembly="Web" /&gt;,在页面中使用&lt;Custom:MySqlDataSource&gt; 而不是&lt;asp:SqlDataSource&gt;,在所有这些中更改您喜欢的任何名称。
  • 我按照你说的做了,得到:基类包含字段'SqlDataSource1',但其类型(System.Web.UI.UserControl)与控件类型(Outsider)不兼容.Code.SqlDataSource2).
  • 似乎解决了问题
猜你喜欢
  • 2013-10-06
  • 1970-01-01
  • 2016-11-22
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
相关资源
最近更新 更多