...而不是从配置文件中读取它!除了准确阅读会员提供商自己使用的内容之外,不要从任何地方推断它。叫我偏执狂。
我的应用程序中的第一个数据访问是对成员资格提供程序的访问。绝大多数连接问题都是将应用程序部署到使用开发的连接字符串进行分段或生产的地方,因此我想更改此信息:
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." );
}
如果是这种情况,请相应地发表评论。
答案 0 :(得分:1)
我不相信您可以使用直接属性来提供连接信息。您可以做的一件事是将您选择的成员资格提供程序子类化并实现您自己的属性以向您提供信息。
答案 1 :(得分:0)
在UI中表面连接字符串通常被认为是一个坏主意(即安全性较差),这就是为什么你找不到随时可用的属性来传递从配置文件中读取它的类的值。
您可能需要考虑解决与部署相关的问题的根本原因。通过使用不同的配置文件进行开发,登台和生产,可以轻松解决此问题。 Visual Studio内置支持自动管理相应配置文件的部署。详情如下:
http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx
答案 2 :(得分: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();
}