【问题标题】:db connection within multiple pages asp.net多页asp.net中的db连接
【发布时间】:2013-02-27 14:31:11
【问题描述】:

我的 npgsql 与数据库的连接出现问题。关键是我的应用程序根据 db 验证用户。如果成功则重定向到下一页并显示 SQL 查询。当站点被重定向并尝试读取查询时,异常显示:连接未打开。 任何人都可以帮助我吗?

string connectionString =
"Server=serverName;" +
"Database=dbName;" +
"User ID=" + strUsername + ";" +
"Password=" + strPassword + ";" +
"Port=portNo;";

NpgsqlConnection dbcon;
dbcon = new NpgsqlConnection(connectionString);
dbcon.Open();

【问题讨论】:

  • 几个问题。查询在代码中存储在哪里?您是否尝试跨页面使用相同的变量?您在进行数据库调用后是否关闭了连接?您是否分别调用验证和“查询”?
  • 1.它存储在登录页面的第一页。 2. 如果用户已通过身份验证,则将其用于第二页上的所有查询。 3. 不,我不会关闭它。 4. 不,没有单独的验证调用。
  • 所以你想在第二页使用存储在第一页的代码? (此代码是存储的查询或访问数据库的代码)

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


【解决方案1】:

您似乎正在尝试重用无法从不同位置访问的代码。这是我的方法。

创建一个通用数据访问器。创建一个名为DataAccessor 的类(如果该文件夹存在,您可能必须将其存储在App_Data 中)。这是一个类,您可以在每个要在其中使用它的页面中初始化和调用它。

public class DataAcessor
{
    private _connectionString;

    public DataAcessor(string connectionString)
    {
        _connectionString = connectionString;
    }

    public bool ValidateUser(string username, string password)
    {
        //code to call database for validation only, returns true or false
    }

    public string GetUserName(int userID) //or some other call to the database
    { }
}

现在在每个页面上,创建一个新的类对象并使用它。除非您使用 Session 变量,否则您不能依赖其他页面的数据。

DataAccessor da = new DataAccessor("<some conn string>");
da.ValidateUser("joe", "asdf");

在你的第二页上:

DataAccessor da = new DataAccessor("<some conn string>");
da.GetUserId(123);

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 2016-03-04
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多