【问题标题】:How to set connectionstring at web.config file programmatically or dynamically?如何以编程方式或动态方式在 web.config 文件中设置连接字符串?
【发布时间】:2015-01-04 06:51:44
【问题描述】:

我正在尝试创建一个 ASP.NET 网站。我正在使用数据库。为了连接数据库,我使用了存储在 web.config 文件中的连接字符串,例如

  <connectionStrings>
  <add name="DBConnectionString" 
    connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=G:\CarRentalServices\App_Data\CarRentalServiceDB.mdf;Integrated Security=True"/>
  </connectionStrings>

在代码后面

private string _connectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;

所以你可以看到数据库存储在G:\path\to\db\CarRentalServiceDB.mdf

但是现在如果我的朋友想从我这里拿走项目并尝试从他的机器上运行项目,那么他必须将connectionString 更改为web.config。假设网站现在在我朋友机器上的D:\path\to\db\foo\CarRentalServiceDB.mdf,那么connectionString 需要更改。是不是很乏味?

有没有办法用任何批处理文件或代码动态更改connectionString,以便它会根据它现在所在的当前目录进行更改?

【问题讨论】:

    标签: c# asp.net connection-string


    【解决方案1】:

    你应该使用 |DataDirectory|令牌:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx

    <connectionStrings>
     <add name="DBConnectionString" 
    connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\App_Data\CarRentalServiceDB.mdf;Integrated Security=True"/>
    

    【讨论】:

    • 试过这个但得到一个 SqlException。我也按照链接中的说明删除了日志文件。还有其他解决方案吗?
    • 异常详情是什么?数据文件存放在哪里?
    • 已解决。将连接字符串用作connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\CarRentalServiceDB.mdf;Integrated Security=True"/&gt;
    【解决方案2】:

    你可以在你的 web.config 文件中添加多个连接字符串,然后调用你需要的那个

    Web.config 文件

      <connectionStrings>
      <add name="DBConnectionString" 
        connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=G:\CarRentalServices\App_Data\CarRentalServiceDB.mdf;Integrated Security=True"/>
      <add name="DBConnectionStringTwo" 
        connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\path\to\db\foo\CarRentalServiceDB.mdf;Integrated Security=True"/>
      </connectionStrings>
    

    连接字符串代码

    //Connection String 1 
    private string _connectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
    
    //Connection String 2 
    private string _connectionString2 = ConfigurationManager.ConnectionStrings["DBConnectionStringTwo"].ConnectionString;
    

    【讨论】:

    • 是的,这可能是一回事,但是构建解决方案时是否会触发任何批处理文件或代码,然后web.config 将使用AttachDbFilename 的数据库路径进行更新?
    猜你喜欢
    • 1970-01-01
    • 2010-09-26
    • 2011-05-02
    • 2022-08-19
    • 2010-12-07
    • 1970-01-01
    • 2014-04-01
    • 2011-05-31
    • 1970-01-01
    相关资源
    最近更新 更多