我最近改变了连接在我的网络应用上的工作方式,现在我面临着一些我不理解的事情。
我有一个页面在Page_Load中调用一个名为“ItemGet”的函数,当第一个转发器(Repeater1)中没有数据时,它可以正常工作。当我点击一个用不同数据重新加载页面的按钮(我知道转发器中有数据)时,连接会在同一个转发器(转发器1)之后立即自动关闭。问题是,在(RepeaterTopTen)之后还有另一个需要相同连接的转发器。我在调用该函数后立即手动关闭了连接,但至少我需要连接在所有函数期间保持打开状态。
你们有没有人知道为什么它会自行关闭以及我可以做些什么来防止它在此时关闭?
以下是代码:
private void ItemsGet(string csCategory, string csTimeFrame)
{
DataSet data;
if (csCategory == null)
{
data = m_database.GetPost(Tools.GetPostLang(), Session["TimeFrame"].ToString());
Page.Title = m_database.GetTranslation(509);
}
else
{
data = m_database.GetPost(Convert.ToInt32(csCategory), Tools.GetPostLang(), Session["TimeFrame"].ToString());
Page.Title = m_database.GetTranslation(508) + m_database.GetCategoryName(Convert.ToInt32(csCategory));
}
// Populate the repeater control with the Items DataSet
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = (DataView)(data.Tables[0].DefaultView);
// Indicate that the data should be paged
objPds.AllowPaging = true;
// Set the number of items you wish to display per page
objPds.PageSize = 5;
// Set the PagedDataSource's current page
if (CurrentPage != 0)
objPds.CurrentPageIndex = CurrentPage;
else
objPds.CurrentPageIndex = 0;
lblCurrentPage.Text = m_database.GetTranslation(423) + (CurrentPage + 1).ToString() + m_database.GetTranslation(422) + objPds.PageCount.ToString();
// Disable Prev or Next buttons if necessary
btnPrev.Enabled = !objPds.IsFirstPage;
btnNext.Enabled = !objPds.IsLastPage;
Repeater1.DataSource = objPds;
Repeater1.DataBind();
DataSet dataTopTen = m_database.GetTopTenUser();
RepeaterTopTen.DataSource = dataTopTen;
RepeaterTopTen.DataBind();
}
答案 0 :(得分:0)
因为没有人回答那个,我创建了一个检查连接是否打开的功能,如果没有,则打开它。我仔细检查过每次都关闭了。
答案 1 :(得分:0)
如果声明数据库对象并在Page_Load
方法中调用数据库连接上的open方法,则数据库连接将在整个页面生命周期内保持打开状态。在此函数中声明了数据库连接后,数据库对象将超出范围,并在函数结束时关闭。