大家知道, 在.net中 ,数据库的连接信息只有在连接池里的不到的时候,才会去建立 , 现在有一个问题 : 我有一个网页是每隔一段时间去检测数据库是否连接正常 , 就是网页自动刷新 , 但是当此网页一直开着 , 只刷新时 , 并不能即时发现(当数据库已经连接不上)数据库server段已经断开 , 我查了一些资料 , 说是.net有连接池 , IIS里保存数据库连接的信息 , 所以我想问大家 在页面每次reload 时 , 重新建立连结  , 而不是使用连结池或者IIS里保存的旧信息
在.net中,如何清除连结池中的数据库连接信息
在我的程式中連接數據庫的部份寫法如下 :
string ConnString="data source=Soucename;user id=username;password= password;Persist Security Info=False";

string returnString = "";
Oraconn = new OracleConnection(ConnString);
try
{
Oraconn.Open();
returnString="OK";
}
catch(Exception ex)
{
returnString=ex.Message;
Response.Clear();
}
finally
{
Oraconn.Close();
Response.Clear();
}

解决方案 »

  1.   

    连接字符串加pooling=false静止使用连接池,默认情况下是使用的
    string ConnString="data source=Soucename;user id=username;password= password;Persist Security Info=False;pooling=false";
      

  2.   

    连接字符串加pooling=false静止使用连接池,默认情况下是使用的
           string ConnString="data source=Soucename;user id=username;password=       password;Persist Security Info=False;pooling=false";加上pooling=false 之后,确实可以重新建立连接 , 但是我的页面却会不停的刷新 , 以致无法正常监控 以下为我的 刷新循环程序的部份码 , 请楼上帮忙解析一下 , 谢谢!
    <script language="javascript" id="clientEventHandlersJS">
    function refre() 
    {
     f1.submit (); 

    var i = 0;
    function counter() 
    {
     if (i==0) 
    var ref = document.f1.T_Fresh.value; 
    else 
    var ref = document.f1.T_Left.value 
    var counter = ref; i++; 
    if (counter >= 1) 

    counter = counter - 1; 
    }
     else 
    {
     counter = counter; 
    }
     if (counter <= 0) 

    document.f1.submit(); 

    document.f1.T_Left.value = counter; counter=setTimeout("counter()",1000); 
    }
    </script>
    <BODY language="javascript" id="Body1" topMargin="5" scroll="yes" onload="javascript:counter();">
    Fresh Time:<input id="T_Fresh" type="text" onchange="document.f1.submit();" size="15" name="T_Fresh" runat="server">
    Left Time:<input id="T_Left" type="text" size="15" name="T_Left" runat="server">
    注释 : Fresh Time 是说刷新间隔时间  ; Left Time 为离刷新剩余的时间
      

  3.   


    CS 档部份代码如下所示
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;using System.Configuration;
    using System.Data.OracleClient;
    using System.Data.SqlClient;
    using System.Text;
    using System.IO;namespace Monitor
    {
    /// <summary>
    /// WebForm1 的摘要描述。
    /// </summary>
    public class Monitor : System.Web.UI.Page
    {
    private const long maxGarbage = 1000;
    protected System.Web.UI.WebControls.Label Label_Tbody;
    protected System.Web.UI.HtmlControls.HtmlImage Img_DMP11;
    protected System.Web.UI.HtmlControls.HtmlTable T_QueryCondition;
    protected System.Web.UI.HtmlControls.HtmlInputText T_Fresh;
    protected System.Web.UI.HtmlControls.HtmlInputText T_Left;
    protected System.Web.UI.HtmlControls.HtmlGenericControl Frame_LogDetail;
    protected System.Web.UI.WebControls.Label Label_LogRealTime; protected OracleCommand Oracmd;
    protected OracleDataAdapter Oraadapter;
    protected OracleConnection Oraconn;

    protected string error=""; private void Page_Load(object sender, System.EventArgs e)
    { // 在这里放置使用者程序码以初始化网页
    try
    {
    Page.EnableViewState = false;
    if(T_Fresh.Value.Trim().ToString()==null||T_Fresh.Value.Trim().ToString()=="")
    {
    T_Fresh.Value="30";
    T_Left.Value="30";
    }
    else
    {
    T_Fresh.Value=T_Fresh.Value.Trim().ToString();
    T_Left.Value=T_Fresh.Value.Trim().ToString();
    }
    FillDataXMLDBCon();
    }
    catch(Exception ex)
    {
    error = ex.Message;
    }
    }private void FillDataXMLDBCon()
    {
    string ConnString="data source=source;user id=username;password= password;Persist Security Info=False ;pooling=false ";string returnString = "";
    Oraconn = new OracleConnection(ConnString);
    try
    {
    Oraconn.Open();
    returnString="OK";
    }
    catch(Exception ex)
    {
    returnString=ex.Message;
    Response.Clear();
    }
    finally
    {
    Oraconn.Close();
    Response.Clear();
    }
    if(returnString!= "OK")
    {
    ErrorCount++;
    DateTime now = DateTime.Now;
    }
    i++;
    T_Left.Value=T_Fresh.Value.Trim().ToString();
    }
    }
    }
      

  4.   

    为什么要在web form里面保持数据库连接呢?感觉设计模式有问题。
    这就好比本来有5个窗口卖票,你过去买票时哪个窗口空着就到哪个窗口买,如果全满了卖票处就再开个窗口。可现在你却要每来一个人,专门为他开个窗口,别人不能用。等这个人买好了票再把这个窗口拆掉,重新再为下一个人建另一个窗口……
      

  5.   

    为什么要在web form里面保持数据库连接呢?感觉设计模式有问题。
    这就好比本来有5个窗口卖票,你过去买票时哪个窗口空着就到哪个窗口买,如果全满了卖票处就再开个窗口。可现在你却要每来一个人,专门为他开个窗口,别人不能用。等这个人买好了票再把这个窗口拆掉,重新再为下一个人建另一个窗口……
      

  6.   

    JadyWang(最近比较矛盾) 
    WEB Form 没有保持数据库的连接 , 请问 , 你看到是那一句保持了数据库的连接
      

  7.   

    既然没有保持连接,那么为什么要定期检查连接呢?只需要在用到时建立就可以了呀。由于server端使用connection pool,所以建立连接不会造成很大的开销,很多时候server只是某个空闲的连接分配给你呀
      

  8.   

    因为当出现问题时 , Javascript客户端的码并不能即时初始化 , 所以Javascript客户端代码重新初始化赋值给T_Left就好了,测试已经OK