不可能一直开着连接,否则当回收资源时回引发异常!
从理论上来说肯定是读一次开关一次。
不过在实际中这没有什么意义,消耗内存!如果非要实现这个功能的话建议采用其他技术如soket。

解决方案 »

  1.   

    主要看你做的东西是基于桌面的基于网络的还是基于Web的,
    是单用户还是多用户,多用户的话能多到什么程度。单用户的情况下,就让Connection一直开着吧,
    网络的情况,具体看环境了,在局域网内的话,开就开着喽,差不了多少
    Web的时候还是关上的好,因为这一般都是多用户的ADO.NET本身是基于断开连接来考虑问题的,所以推荐使用断开连接的方式,
    但这也要考虑具体项目的要求。
      

  2.   

    soket,从来还没有使用过。有时间研究一下。
      

  3.   

    我要做的是以数据库为接口的windows 应用程序。
    需要不停地监视数据库的变化并根据数据库的变化而作出反应。我没怎么做过 windows 应用程序。以前都做 web 方面的。还有,做 windows 应用程序时,数据库连接字符串应该怎么放置?也就是放在哪里最好呢?
      

  4.   

    我要做的是以数据库为接口的windows 应用程序。
    需要不停地监视数据库的变化并根据数据库的变化而作出反应。
    ============================
    是数据库中的数据发生变化就响应呢,还是某个字段的值变化,还是某个(或多了字段)变为指定值?数据量有多大?
    还有,做 windows 应用程序时,数据库连接字符串应该怎么放置?也就是放在哪里最好呢?
    ====================================
    我喜欢放在配置文件中.
      

  5.   

    偶不会用数据库触发器,
    所以只能想个笨办法了:
    表中加入一个DateTime字段,默认值为系统当前时间,初始化一个LocalCount
    SELECT COUNT(*) FORM TableName每10s计算一个DbCount
    SELECT COUNT(*) FORM TableName取新的记录
    if(LocalCount<DbCount){
      SELECT TOP DbCount-LocalCount * FORM TableName ORDER BY Time
      LocalCount = DbCount;
    }
      

  6.   

    你们这样无非是数据变化快...而又不想刷新页面才能看到新数据是吧! 我觉得使用XML技术最佳!使用不刷新刷面,但数据会同步于最新数据! 可以参考一下XML技术
      

  7.   

    最近做了java的项目,
    知道了连接池的概念,可以类比为线程池
    即与数据库的连接一直保持着,需要时取一条连接用,用完释放占用,但并不断开连接
    目的就是为了提高性能,因为每建立一次连接的消耗是很大的。想想c#为什么没有类似的机制呢,
    其实非也,_net运行时在底层已经这样为我们实现了,
    即你表面上是使用connection.open()打开一个连接,其实只是在"取用"一条已经存在的连接。
    有一个现象你可以观察一下,
    在你的调用connection.close()之后,你不妨在数据库中查看当前活动连接,
    哈哈,奇怪的现在发生了,居然还存在着被你的程序打开的连接
    究其原因正在于此。
      

  8.   

    加一个timer控件设置Interval=100000
    用sqlDataAtapter
    private void Form1_Load(object sender, System.EventArgs e)
    {
    sqlDataAdapter1.Fill (this.dataSet1);
    dt=this.dataSet1.Tables ["rec"]; 
    this.timer1.Enabled =true;
     
    }
    private void timer1_Tick(object sender, System.EventArgs e)
    {
    dt.Clear(); 
    sqlDataAdapter1.Fill(this.dataSet1); 
     dt=this.dataSet1 .Tables ["rec"] ;
                                 if (dt.)......
    }
      

  9.   

    数据库中建立触发器,专门建立表、XML文件或文本文件纪录修改的值,然后通过socket采用多线程监听端口与发送(文本文件需要串行化)、MSMQ、Windows Service或那个专门的表,总之是接收修改的数据,毕竟修改的数据没有所有数据量那么大,然后按主键更新你的dataset,
    当然,这样做技术方面要求比较高,涉及技术包括XML读写、文件串行话、数据库tigger、storeprocedure、MSMQ、多线程、SOCKET、Windows Service、委托、事件等,但速度绝对保证。可能楼主会受不了我了,这时我想到的最好的办法了(如果数据量大的情况)。
      

  10.   

    ADO.net里面运用的正是数据库连接池,所以推荐每次使用的时候打开连接(实际上就是去连接池里面已经打开好的若干连接里面拿一个可用的),用完以后dispose或close(其实就是把连接退回给连接池(告诉连接池该连接再次可用);无论b/s还是c/s都是推荐这样去干的
      

  11.   

    我发现 一直 sqlConn.Open(),会出现莫名其妙的错误。
    我现在的办法就是 Open 、Execute、Close 。
    我觉得这样是很费资源的。
    唉。
    大家继续讨论讨论。
      

  12.   

    我也是用qxwaspx(我爱我家) 的方法,关注
      

  13.   

    我同意8cet8(8cet8)的!以前没认真学JAVA!现在环境所迫用C#.........
    我同意Open 、Execute 
      

  14.   

    我想不CLOSE也不会报错的
    但COUNT就有问题了 要是数目不变化 而是数据的变化了 你怎么能监视到列~~~~~~~~
      

  15.   

    8cet8(8cet8) ,yhwebus(小鸿)说的连接池原理确实很有道理大家继续讨论一下。
      

  16.   

    wangsaokui(无间道II(前传)) 老兄可以说的具体一些吗!我也正想听听高见
      

  17.   

    呵呵,你的这个程序和我去年做的一个项目类似喔我是这么完成的,由一个程序专门检测数据库更改记录(采用触发器及生成同步表)
    然后用Socket发送给所有连接用户当然检测连接的程序connection是一直开着的!若对我提供的思想感兴趣,请继续
      

  18.   

    你的connection 一直开着有没有出错?
      

  19.   

    因为本系统只有一个程序需要访问数据库,当然Connection一直开着,有时候由于各种原因会断开(出错),这时候程序应该重新打开Connection