2011-03-14 63 views
1

...而不是从配置文件中读取!除了完全阅读会员提供商自己使用的内容之外,不能从任何地方推断它。叫我偏执狂。如何获取成员资格提供程序正在使用的ConnectionString?

我的应用程序中第一次访问数据是对成员资格提供者的访问。绝大多数的连接问题已经在应用程序部署到暂存或生产与发展的连接字符串,所以我想改变这种:

MembershipUser me = Membership.GetUser(); 

这样:

MembershipUser me; 

try 
{ 
    me = Membership.GetUser(); 
} 

catch (SqlException E) 
{ 
    Response.Write("SQL Error " + E.Message + ".<br />"); 
    Response.Write("Connection String: " + Membership.Provider.WHAT? + "<br />"); 
} 

似乎很明显,但我发现每一个参考指示我使用ConfigurationManager,这是我特别不要想要做的。虽然我承认这样做可能是我唯一的选择,而且这是一个令人满意的选择。

我完全愿意接受的可能性,我的问题是看齐,与此:

int i; 

try 
{ 
    i = 42; 
} 

catch (Exception e) 
{ 
    Response.Write("Error assigning literal to integer.");  
} 

如果是这种情况,请相应评论。

+1

在对代码进行任何更改之前,也许您可​​以做一些事情来使您的部署过程更加健壮?我建议为您的不同环境(开发,分期,制作等)创建web.config变换,以减少忘记更改环境相关设置的风险(请参阅http://msdn.microsoft.com/zh-cn/library/ dd465318.aspx)。 – 2011-03-14 16:17:32

回答

1

我不相信有一个直接的属性,你可以使用它会给你连接信息。您可以做的一件事是将您选择的会员提供商划分子类并实施您自己的属性以向您提供信息。

+1

SqlMembershipProvider的_sqlConnectionString字段是私有的。你必须依靠反思来获得它。 – PHeiberg 2011-03-14 16:17:55

+1

同意。这里有一个博客帖子,显示了这样做的一个例子,尽管为了动态设置连接字符串而不是查看它,但想法是一样的... http://devspade.com/index.php/2010/ 6月28日/使用动态连接串与 - 的-ASP-净-SQL成员资格提供者/ – Zannjaminderson 2011-03-14 16:19:12

0

它通常被认为是一个坏主意表面在UI连接字符串(即安全性差),这就是为什么你不会找到现成的属性来传递值从已经从配置文件中读取类。

您可能需要考虑解决与部署有关的问题的根本原因。通过使用不同的配置文件进行开发,分期和生产,这个问题很容易解决。 Visual Studio内置了对自动管理相应配置文件的部署的支持。全部细节在这里:

http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx

0

你好这里是一个办法获取连接字符串从或由指定供应商名称(如MySQL的供应商)。

using MySql.Data.MySqlClient; 
using MySql.Data; 
using MySql.Web.Security; 
using System.Collections.Specialized; 
using System.Reflection; 


void SomeFunction() 
{ 

    Type t = Membership.Provider.GetType(); 
    FieldInfo fi = null; 
    while (fi == null && t != null) 
    { 
     fi = t.GetField("connectionString", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 
     t = t.BaseType; 
    } 

    MySql.Web.Security.MySQLMembershipProvider a =(MySql.Web.Security.MySQLMembershipProvider)Membership.Provider; 

    string Connection_String_Value= fi.GetValue(a).ToString(); 

} 
  • 通过替换“的connectionString”与其他非公共字段名称您 也可以访问它的价值。
  • 通过与 Membership.Providers [“Name_Of_Your_Provider”]更换提供商(默认),你可以得到它的 连接字符串了。
相关问题