我在function.cs页面里面建立了数据库连接,然后在其他用到数据库的页面把function实例化
但不知道为什么,浏览页面久了,经常会出现连接池满了的现象,是不是我哪里做错了?这是function.cs的部分内容(还有其他函数):....
public function()
{
//
// TODO: 在此处添加构造函数逻辑
Open();//
}// 1.—————————————数据库操作函数——————————————
/*************************************************************
* 类 名:Open()
* 作 用:连接数据库
* 参 数:空
* 返回值:空
***************************************************** */
public void Open()
{
myConnection=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["sql_Connstr"]);
myConnection.Open();
}/**************************************************************
* 类 名:Close()
* 作 用:关闭数据库和清除DateSet对象
* 参 数:空
* 返回值:空
***************************************************************/
public void Close()
{
if (ds!=null) // 清除DataSet对象
{
ds.Clear();
}
if (myReader!=null)
{
myReader.Close();
}
if (myConnection!=null)
{
myConnection.Close(); // 关闭数据库
}
}
/******************************************************
* 类 名:Fill()
* 作 用:建立DataSet对象,用记录填充或构架(如果必要)DataSet对象,DataSet即是数据在内存的缓存
* 参 数:str_Sql-----打开表Sql语句
* 返回值:空
****************************************************** */
public void Fill(string str_Sql)
{
Open();
myAdapter = new SqlDataAdapter(str_Sql,myConnection);
ds = new DataSet();
myAdapter.Fill(ds);
}
.....
页面实例化:protected function conn=new function();其中调用function的函数(有树绑定dropdownlist,删除,编辑等函数)时候,刚开始运行没问题,不久就会连接池满了,不知道是哪里出错了,请高手指点,以上面这个为基础,我在其他页面上该如何Close跟Dispose?假使我调用了上面的Fill函数:conn.Fill(sql),后面应该跟上conn.Close(),conn.myConnection.Close(),conn.myConnection.Dispose(),还是怎样?
但不知道为什么,浏览页面久了,经常会出现连接池满了的现象,是不是我哪里做错了?这是function.cs的部分内容(还有其他函数):....
public function()
{
//
// TODO: 在此处添加构造函数逻辑
Open();//
}// 1.—————————————数据库操作函数——————————————
/*************************************************************
* 类 名:Open()
* 作 用:连接数据库
* 参 数:空
* 返回值:空
***************************************************** */
public void Open()
{
myConnection=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["sql_Connstr"]);
myConnection.Open();
}/**************************************************************
* 类 名:Close()
* 作 用:关闭数据库和清除DateSet对象
* 参 数:空
* 返回值:空
***************************************************************/
public void Close()
{
if (ds!=null) // 清除DataSet对象
{
ds.Clear();
}
if (myReader!=null)
{
myReader.Close();
}
if (myConnection!=null)
{
myConnection.Close(); // 关闭数据库
}
}
/******************************************************
* 类 名:Fill()
* 作 用:建立DataSet对象,用记录填充或构架(如果必要)DataSet对象,DataSet即是数据在内存的缓存
* 参 数:str_Sql-----打开表Sql语句
* 返回值:空
****************************************************** */
public void Fill(string str_Sql)
{
Open();
myAdapter = new SqlDataAdapter(str_Sql,myConnection);
ds = new DataSet();
myAdapter.Fill(ds);
}
.....
页面实例化:protected function conn=new function();其中调用function的函数(有树绑定dropdownlist,删除,编辑等函数)时候,刚开始运行没问题,不久就会连接池满了,不知道是哪里出错了,请高手指点,以上面这个为基础,我在其他页面上该如何Close跟Dispose?假使我调用了上面的Fill函数:conn.Fill(sql),后面应该跟上conn.Close(),conn.myConnection.Close(),conn.myConnection.Dispose(),还是怎样?
还有,这样的工具类,最好是用static的,没有实例化的必要
去看看sqlhelper另
不耻下问,在这样的上下文中不太适合^_^
private void Page_Unload(object sender, System.EventArgs e)
{
conn.Close();
}还是不行,why?
myConnection.Dispose();conn.Close();放你使用后的立即执行
* 类 名:BindDropDownList()
* 作 用:绑定DropDownList控件并显示数据,DropDownList控件Value,Text值将等于str_Text值
* 参 数:str_Text-----绑定DropDownList控件Value,Text值相对应数据库表字段名
* sql-----Select-SQL语句
* myDropDownList-----DropDownList控件id值
* 返回值:空
*************************************************** */
public void BindDropDownList(string str_Text,string sql,DropDownList myDropDownList)
{
// 绑定DropDownList控件(注:四个函数,该函数需要一个字段名,分别绑定Value和Text两值,默认表名)
Open();
Fill(sql);
myDropDownList.DataSource=ds.Tables[0].DefaultView;
myDropDownList.DataValueField =str_Text;
myDropDownList.DataTextField=str_Text;
myDropDownList.DataBind();
}
conn.Close()
end try最好在finally中加入conn.Close()
好好学习语文呀!
不耻下问不是这么用的!
按你提供的代码看,你好像没有显式的调用Close函数,那么这些数据库连接将一直的保持着,直到你出错。你应该在Fill填充函数中执行 Open 和 Close 函数,而不应该在对象构造时就这么早的连了数据库,这时你还没有用到数据库呢!正如上面大家说的,你应该在需要连接数据库时(如要Fill,或其他操作前)才开始Open,一旦Fill完,或执行完SQL查询,就要Close了,不要等到对象销毁时才关闭数据库连接。
但是你在对象中使用成员函数来保存数据库连接的话,应该在Function对象销毁时,检查数据库是否已经关闭,如果因为异常情况没有关闭数据库,你需要在最后确保正确关闭数据库连接。