Sql数据源是否始终保持数据库连接处于打开状态

本文关键字:连接处 于打开 状态 数据库 始终保持 数据源 是否 Sql | 更新日期: 2023-09-27 18:19:57

>基本上我有一个网站,我正在开发的网站,其中将有超过 8 个列表框填充来自数据库的信息。由于易于使用,我目前使用 SqlDataSource,并且正在使用它当前数据绑定到列表框。

SqlDataSource是否一直保持连接打开状态?我想从网站架构的角度来看,出于安全原因和性能原因,消除任何不必要的持续打开的连接。

Sql数据源是否始终保持数据库连接处于打开状态

直接回答您的问题:不。控件可确保在完成需要执行的操作后立即关闭连接。

我曾经使用SQLDataAdapter + SQLCommand,但现在我主要使用

using(SQLDataReader rdr = <YourSQLCommandVariable>.ExecuteReader())
{
    rdr.Load(<YourDataTableVariable))
}

原因是我不确定数据适配器在数据读取器顶部做了什么,以允许它进行批量更新、读取和删除。如果您考虑一下,编写像数据适配器这样的类将非常困难,它可以在不引入任何开销的情况下完成所有这些操作。开销可能不大,但除非我将多个表从查询中读取到 DataSet 对象中,否则我不会冒使用它的风险。

话虽如此,如果您将所有结果数据本地缓存到本地机器中,我怀疑这些操作的任何开销是否值得考虑。换句话说,您可以对 SQL 查询进行的最大改进是,如果数据在某个时间范围内不太可能更改,则不要进行查询。如果数据每天更新一次,请将其缓存 24 小时或更短时间。缓存可以通过会话(如果它依赖于最终用户(或通过 HttpContext.Current.Cache 对象完成。

听起来您可能希望在应用程序中进行一些层分离。 理想情况下,Web 项目不了解数据库。 理想情况下,有一些中间层程序集处理与数据库的通信。 然后,从您的.aspx.cs或控制器中,根据您是否使用 MVC,您将对中间层进行 8 次调用(假设每个列表框具有不同的信息,则一个(。 中间层将返回类似于List<MyObject>的内容,然后您将将其绑定到列表框。

我的典型数据访问模式如下所示

using (SqlConnection conn = new SqlConnection("conn string"))
{
    conn.Open();
    SqlCommand command = new SqlCommand()
    {
        CommandText = "command text",
        Connection = conn,
        CommandType = CommandType.StoredProcedure //could be non-stored proc.. but would reccomend stored proc assuming SQL Server
    };
    command.Parameters.Add(new SqlParameter("MyParam", "param1"));
    command.Parameters.Add(new SqlParameter("MyParam2", "param2"));
    IDataReader reader = command.ExecuteReader();
    while(reader.Read())
    {
     //magic here
    }
    conn.Close();
}