建议采用第一种方式操作。
理由如下:
1、每次操作之前建立连接,保证在操作时连接的有效性,提高可靠性。
2、操作完马上关闭,便于释放资源,提高系统性能。
3、采用Application变量会站用系统资源。

解决方案 »

  1.   

    你的几种方式实现起来都不算错误但从效率和安全性上考虑,第一和第二种会比较合适, 第三种不太好
    看你页面要做的sql操作的多少, 决定用哪一种方式省资源又安全
      

  2.   

    Oh,Yes. 那我按照第二种,现在有一个问题:
    我有一个数据库操作的类:
      public class DatabaseWork
      {
            SqlConnection conn;
            public DatabaseWork()   // 构造函数
            {
                 conn = new SqlConnection("....");
                 conn.Open();
            }
            public DataSet ListUser(string UserName)
            {
                 DataSet ds;
                 conn.execute ....
                 return ds;
            }
            public DataSet ListComment(string UserName)
            {
                 DataSet ds;
                 conn.execute  ....
                 return ds;
            }
         }
    在网页中用的时候:
      DatabaseWork db= new DatabaseWork();
        DataSet ds=db.ListUser("abc");
        DataSet ds2=db.ListComment("abc");
    是可以的,但操作多了,就会报那个“池连接错误”,意思是Conn没有Close();我的问题是,应该在哪里写conn.Close()呢?
      

  3.   

    好的方法应该是在pageload里面打开,
    在PreRender里面关闭,因为用户触发一个比如说click事件之后,可能pageload要用连接,在click事件处理代码里面也用到,这样就会浪费掉一个open。
    而PreRender事件是在页面呈现给用户之前执行最后一个事件,不管怎么样pageload和prerender总是要执行的
      

  4.   

    用dataset之前必须把连接关闭,因为dataset不需要
      

  5.   

    又说错了,是SqlDataAdapter,不是DataSet
      

  6.   

    在每个:
     public DataSet ListComment(string UserName)
            {
                 conn.Open()
       //执行内容             conn.Close()
            }我一般是这样做的.
    然后在在要使用 ListComment()的时候就调用一下。
      

  7.   

    第二中方法也有一个弊端,就是如果在比如说一个button的click事件里面处理代码很多,又是与数据库操作无关的,在执行这段代码的时候,数据库连接是开着的,
    这就浪费了:)
    --