如何将连接字符串保存在应用程序变量中?

时间:2011-12-27 15:25:30

标签: c# asp.net .net connection-string

在登录页面中,我通过以下代码确定用户是否是管理员:

if (r.IsUserInRole(txtUserUsername.Text, "User") == true)
{
    connection = ConfigurationManager.ConnectionStrings["GameHutDBEntities1"].ToString();

    switch (new BusinessLayer.Users().ValidateLogin(txtUserUsername.Text, txtUserPassword.Text, connection))
    {
        case Helpers.LoginStatus.LoginSuccessful:
        {
            Response.Write("<Script> alert('Welcome to GameHut Admin Panel!')</Script>");
            FormsAuthentication.RedirectFromLoginPage(txtUserUsername.Text, chkRemember.Checked);
            break;
        }
        case Helpers.LoginStatus.Blocked:
        {
            Response.Write("<Script> alert('Account Blocked')</Script>");
            break;
        }
        case Helpers.LoginStatus.Invalid:
        {
            Response.Write("<Script> alert('Invalid username or password')</Script>");
            break;
        }
    }
}

在连接类中,我按如下方式传递连接字符串:

public class ConnectionClass
{
    public GameHutDBEntities Entities { get; set; }
    public System.Data.IDbTransaction Transaction { get; set; }

    public ConnectionClass()
    {
        this.Entities = new GameHutDBEntities();
    }

    public ConnectionClass(GameHutDBEntities _Entities)
    {
        this.Entities = _Entities;
    }

    public ConnectionClass(GameHutDBEntities _Entities, string conn)
    {
        this.Entities = _Entities;
        this.Entities.Connection.ConnectionString = conn;
    }
}

记录管理员并重定向到另一个页面后,连接字符串将丢失并设置默认连接字符串?只要用户注销,有人可以告诉我如何保留连接字符串。

2 个答案:

答案 0 :(得分:2)

那是因为你在后面的web表单代码中实例化了类,当你因为ASP.NET无状态而切换到另一个页面时,实例化的对象就会丢失。

如果需要重用连接字符串,请将其保存在会话变量中:

Session["conn"] = "connection string";

您可以在任何地方重复使用它。

还有其他一些选项,例如Cache或静态属性,甚至每次要使用它时都会从Configuration中读取它。这实际上取决于使用环境。

修改

要从配置中读取连接字符串,您可以使用ConfigurationManager中的System.Configuration类:

string conn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

答案 1 :(得分:0)

将连接字符串名称保留在数据访问层中,并在每次需要时从Web.config中读取它(或在本地缓存它)。