连接字符串到底哪个有效?一个小的测试

本文通过一个测试过程探讨了在项目中,当数据库连接字符串存在于Persistence层的App.Config和Web层的Web.Config时,运行时如何选择的问题。测试结果显示,如果Web.Config存在相同名称的连接字符串,它将优先于App.Config被使用;否则,将使用Persistence层的连接字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       之前我曾经发帖子询问过这个问题,发完帖子后自己测试了一下,得出了答案,但是最近项目组又有人提出这个问题,有点怀疑自己当初的测试代码。重新测试一下

问题: 

    项目中,给一个解决方案分层,在解决方案下,把数据库持久层(Persistence)作为一个项目。

在Persistence层中创建强类型的Adapter,会自动创建一个数据库的连结字符串,自动存放在app.config里面和setting.settings里面(貌似两个文件的连结字符串是关联的,改一个另外一个自动修改)

下面是问题出来了:

      数据库连接字符串放在Persistence层:如果编译以后成Persistence.DLL则没有办法在运行的时候修改数据库连接了。 这样设计的话,我怎么样把连结字符串改在WEB.config里面以便运行时修改修改?NHIBERNATE可以自动调用运行域的配置文件,强类型构建的Dataset可以吗?

测试过程 

1、数据准备:把本机Sqlserver中Northwind数据库Products表复制到 Pubs数据库中。用Update语句更新Pubs.Products表中ProductName都更改为"npubs"。

2、在测试项目Util层新建QueryPrductsAdpter.xsd数据库操作强类型。新建一个数据库连接NorthwindConnectionString。操作过程会在Util/App.Config中添加

< add name = " Util.Properties.Settings.NorthwindConnectionString "
      connectionString
= " Data Source=localhost;Initial Catalog=Northwind;Integrated Security=True "
      providerName
= " System.Data.SqlClient "   />

新增加一个一个TableAdpater,取得Products表中的所有数据。命名为GetData();

3、在Web层添加测试页面,页面添加GridView1。

填写代码

  protected   void  Page_Load( object  sender, EventArgs e)
    
{

        ProductsTableAdapter pAdpter 
= new ProductsTableAdapter();
        GridView1.DataSource 
= pAdpter.GetData();
        GridView1.DataBind();
    }

4、运行,结果如图

5、在Web.config里面添加

< add name = " Util.Properties.Settings.NorthwindConnectionString "
          connectionString
= " Data Source=localhost;Initial Catalog=pubs;Integrated Security=True "
          providerName
= " System.Data.SqlClient "   />

名字一样,但是连接数据库变成了Pubs。

6、运行结果如图

显然,Web.Config的数据库连接字符串替代了App.Config里的。

7、更改Web.Config的名字,结果又是步骤4的图

结论:

     如果在WEB.Config里面有Persistence层App.config同样名字的的connectString,则按照web.config里面的来,如果没有,则按照ADO的app.config来.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值