我的webconfig中有3种类型的连接字符串,我们将它们用于应用程序的各个部分,例如LDAP登录,相关但非集成的DB的DB状态,以及EF DB First连接字符串(EDMX)
我希望以系统方式最经济的方式解析连接字符串数据。目前
<add name="ADConnectionString" connectionString="LDAP://something.somewhere.something:389" />
<add name="DEV" connectionString="data source=SOURCE;initial catalog=Test;integrated security=False;MultipleActiveResultSets=True;App=EntityFramework;User ID=tech;Password=*********;" providerName="System.Data.SqlClient" />
<add name="ConfigEntities" connectionString="metadata=res://*/Data.Config.csdl|res://*/Data.Config.ssdl|res://*/Data.Config.msl;provider=System.Data.SqlClient;provider connection string="data source=SOURCE;initial catalog=CATALOG;persist security info=True;user id=user;password=*********;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
为了处理连接字符串,我发现我需要尝试捕获两个部分才能完成该过程
首先,try catch允许我们安全地跳过LDAP连接字符串(应该在没有try catch
的情况下跳过它)第二,似乎我需要转换字符串以从中检索数据......
try
{
var ssb = new SqlConnectionStringBuilder((((ConnectionStringSettings)c).ConnectionString));
}
VS
try{
var ssb = new SqlConnectionStringBuilder((new EntityConnectionStringBuilder(((ConnectionStringSettings)c).ConnectionString).ProviderConnectionString));
}
从那里代码是相同的
有没有人想过在运行代码之前确定连接字符串的类型的最佳方法,以防止需要依赖try catch。
答案 0 :(得分:0)
您可以从name
获取连接字符串的ConnectionStringSettings
属性。使用name
属性来标识连接字符串的类型。
您已拥有ConnectionStringSettings
个对象,即c
(基于您的代码段)。
检查name
属性,如下所示,以避免try
声明。
if(c.Name.Equals("ADConnectionString")) //ADConnectionString
{
}
else if(c.Name.Equals("DEV")) //DEV
{
}
else //ConfigEntities
{
}