是否可以有两个具有相同名称的ConnectionStrings?

时间:2014-01-07 11:33:37

标签: c# asp.net asp.net-mvc

在具有两个数据源like或condition的应用程序中,是否可以使用两个连接字符串具有相同的名称。

<add name="DefaultConnection" connectionString="Data Source=serverName|serverIpAddress;Initial Catalog=DatabaseName;User=name;Password=Password;"
      providerName="System.Data.SqlClient" />

任何人都可以帮我这样做。

3 个答案:

答案 0 :(得分:6)

这是不可能的,因为ConnectionStrings是在KeyValuePair中维护的,并且名称是关键。

请告诉我们您为什么需要这样的情况,然后我们可以帮助您。

答案 1 :(得分:2)

如果您的两个数据库配置了SQL Server Mirroring,那么您实际上可以在连接字符串中指定备份服务器。您可以使用Failover Partner执行此操作:

Data Source=Primary_Server;Failover Partner=Secondary_Server; ... other stuff...

然后,您只需使用两个服务器地址编辑现有配置字符串,如果主服务器不可用,框架将自动连接到辅助服务器。

关于Failover Partner的使用有一些特性(从我读过的,我自己没有使用过),所以我建议在实施之前仔细阅读它。

如果您的数据库没有镜像,您将不得不自己实现故障转移,可能是通过抽象获取数据库连接。

在配置中指定两个不同的连接字符串(主要和次要),然后实现某种连接字符串服务,该服务根据您的条件返回相应的连接字符串(即测试主要,如果失败,则返回次要,否则返回主要或者你想要的任何东西。

请记住,在测试字符串后,您的服务器可能会脱机,但在使用它之前,这是一个相当大的优势。如果您需要在这种情况下保持功能,请记住这一点。

答案 2 :(得分:1)

不,你不能有两个同名的连接字符串。 所以,如果你能得到这个代码的结果:

var connectionString=ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

KeyValuePair对象中的连接字符串存储。

  

应用程序可以选择在一个中指定连接名称   提供所需的应用程序配置文件   关键字/值连接字符串值。在这种情况下,你不能   直接在连接字符串中提供它们。 Name关键字不是   允许在配置文件中。

     

当Name关键字未包含在连接字符串中时,a   需要提供商关键字的非空值。

     

此关键字与所有其他连接互斥   字符串关键字。