今天写Web程序中遇到一个有趣的问题。如果OleDbDataReader在使用后忘了Close().会出现刷新3次,提示无法找到对象!
经过我不反复的测试,发现出现每刷新3此就提示一个无法找到对象的错误。不多不少就3次,真的很奇怪。我就查代码发现OleDbDataReader objDR在使用后没有关闭,于是我把它关闭再测试就不再出现以上问题。
难道.net只允许打开3个objDR吗??这会不会引起性能上的瓶颈呢?希望高手能给个彻底的分析。
相关代码如下:
//这是在Channel类中定义的
public void GetChannelDetails()
{
string strGetSql = string.Format("select * from Channel where ID={0}", intID.ToString());
OleDbDataReader objDR = null;
try
{
objDR = Tsing.AccessHelper.ExecuteDataReader(strGetSql);
//这是一个数据库访问类,返回一个OleDbDataReader
}
catch (Exception ex)
{
throw new Exception(ex.Message);
return;
}
while (objDR.Read())
{
strTitle = objDR.GetString(1);
strDirName = objDR.GetString(2);
strDetails = objDR.GetString(3);
}
objDR.Close();
}
//这是在一个Admin_Admin_EditChannel : System.Web.UI.Page类中定义的。
protected void EditChannel()
{
if (Request.QueryString["ID"] != null)
{
WebObject.Channel channel = new WebObject.Channel();
channel.ID = int.Parse(Request.QueryString["ID"]);
try
{
channel.GetChannelDetails();
}
catch (Exception ex)
{
Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "ErrorMessage", string.Format("<script>alert(\"{0}\")</script>", ex.Message));
return;
}
txtTitle.Text = channel.Title;
txtDirName.Text = channel.DirName;
txtDetails.Text = channel.Details;
}
}
OleDbDataReader使用后不关闭会有什么后果呢?
最新推荐文章于 2020-12-24 17:29:17 发布