【问题标题】:Asp.net ajax update panel sharing a database connectionAsp.net ajax 更新面板共享数据库连接
【发布时间】:2010-09-22 13:13:52
【问题描述】:

我在更新面板中有一个下拉框和一个文字标签。在下拉列表的选择更改事件上重新查询数据库并重新填充文字标记,然后调用 UPdatePanel.Update()。

下面,有什么方法可以避免每次都创建一个新的 Oledbconnection,因为这看起来很慢。我可以重复使用和存储:

  1. 数据源
  2. 页面中的连接。

如果是这样,我如何在从 GUI 到服务器的调用之间保持这种状态?下面是我的选择更改代码

protected void cboPeople_SelectedIndexChanged(object sender, EventArgs e)
{
    string dataSource = ConfigurationSettings.AppSettings["contactsDB"];
    var objConn = new OleDbConnection(dataSource);
    string id = People[cboPeople.Text];
    UpdateLiteral(objConn, id);
}

【问题讨论】:

    标签: asp.net database ajax


    【解决方案1】:

    使用 .NET 让您的连接保持比需要更长的时间并不是一个好主意。好的做法是在它周围放置一个 using 语句(这样它总是会被清理掉):

    string dataSource = ConfigurationSettings.AppSettings["contactsDB"];
    using(var objConn = new OleDbConnection(dataSource))
    {
        string id = People[cboPeople.Text];
        UpdateLiteral(objConn, id);
    }
    

    .NET 使用connection pooling,这意味着当您关闭/释放连接时,它实际上并没有关闭连接,而是重置它并将其添加回池中。下次需要连接时,它会从池中使用。所以开销并没有你想象的那么多,而且速度也不慢。实际上,您会发现只要一次只需要一个连接,它就会使用相同的连接。

    保持连接打开的危险在于它们永远不会关闭,并且在高需求情况下您会耗尽连接。

    【讨论】:

      【解决方案2】:

      您需要为每个请求重新创建它。你有一个无状态的服务器。您永远不知道您的客户何时或是否会回电。您不想保持与数据库的开放连接,也不能简单地为多个客户端提供服务,同时保持一个数据库连接。

      部署高性能 应用程序,您必须使用连接 汇集。当您使用 .NET OLE DB 的框架数据提供程序, 您不必启用连接 池,因为提供者管理 这是自动的。更多 有关如何使用的信息 .NET 的连接池 OLE DB 的框架数据提供程序, 请参阅 OLE DB、ODBC 和 Oracle 连接池 (ADO.NET)。 来自OleDbConnection Class

      【讨论】:

      • 使用 viewState 字典怎么样?
      • 如果用户从未返回该页面,则无法检索它。
      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多