C# SqlDataSource是否始终保持数据库连接打开?

C# SqlDataSource是否始终保持数据库连接打开?,c#,asp.net,sqldatasource,sqldataadapter,asp.net-webpages,C#,Asp.net,Sqldatasource,Sqldataadapter,Asp.net Webpages,基本上,我有一个网站,我正在工作,那里将有超过8个列表框充满了来自数据库的信息。由于易于使用,我目前使用的是SqlDataSource,目前使用的是绑定到列表框的数据 SqlDataSource是否始终保持连接打开?出于安全和性能原因,我想从网站架构的角度消除任何不必要的持续打开的连接。我以前使用SQLDataAdapter+SQLCommand,但现在我主要使用 using(SQLDataReader rdr = <YourSQLCommandVariable>.ExecuteRe

基本上,我有一个网站,我正在工作,那里将有超过8个列表框充满了来自数据库的信息。由于易于使用,我目前使用的是
SqlDataSource
,目前使用的是绑定到列表框的数据


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

我以前使用SQLDataAdapter+SQLCommand,但现在我主要使用

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

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

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

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();
}

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

“我喜欢SqlDataSource,因为它易于使用”-但是您是否考虑过质量(可维护性)结果如何?是否有办法根据需要再次打开它,以便在初始填充后重新填充列表?还是每次要运行新的selectCommand时都需要重新初始化它?您无需每次都创建新实例。您只需更改selectCommand,必要时清除任何现有参数,必要时添加新参数,然后调用数据源的Select方法。