基本上我有一个网站,我正在工作,那里将有超过8个列表框充满了数据库的信息。我目前使用SqlDataSource是因为它的易用性,并且正在使用它作为数据绑定到列表框。
SqlDataSource会让连接一直处于打开状态吗?我想从网站架构的角度消除任何不必要的、出于安全和性能原因而持续开放的连接。
发布于 2013-06-27 13:50:02
直接回答你的问题:不。SqlDataSource控件确保连接在它需要执行的操作完成后立即关闭。
发布于 2013-06-27 02:27:41
我过去经常使用SQLDataAdapter + SQLCommand,但现在我主要使用
using(SQLDataReader rdr = <YourSQLCommandVariable>.ExecuteReader())
{
rdr.Load(<YourDataTableVariable))
}原因是我不确定数据适配器在数据阅读器上做了什么,以允许它进行批量更新、读取和删除。如果您仔细考虑一下,就会发现编写像数据适配器这样的类在不引入任何开销的情况下可以完成所有这些任务是极其困难的。开销可能不大,但除非我将一个查询中的多个表读入一个DataSet对象,否则我不会冒使用它的风险。
话虽如此,我怀疑即使在本地将所有结果数据缓存到本地计算机中,也不值得考虑这些操作的任何开销。换句话说,您可以对SQL查询进行的最大改进是,如果数据在一段时间内不太可能发生变化,则不进行SQL查询。如果数据每天更新一次,请将其缓存24小时或更短时间。缓存可以通过会话(如果它是终端用户相关的)或通过HttpContext.Current.Cache对象来完成。
发布于 2013-06-27 02:28:22
听起来您可能需要在应用程序中进行一些层分离。理想情况下,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();
}https://stackoverflow.com/questions/17327576
复制相似问题