我刚学着用C#数据库编程.数据库中每个窗口都要打开数据库连接(sqlserver),然后每个窗体中的除form_load外,一些查询\保存等事件也要打开数据库连接进行操作.
我想,如果一开始就把数据库打开设为全局的,然后只要上面建立sqlCommand之类的进行操作是方便很多;但连接总是打开的话又会占去内存;
所以请问有经验的专家,这个连接是每个过程再打开\还是窗体级或是全局级变量最为适合?

解决方案 »

  1.   

    可以把数据库操作都放到一个类里面,但是不建议用一个静态的Connection, 这样并发情况下的同步和性能会有问题。
    我的建议是需要连接数据库时就创建connection,用完之后就把connection close掉, 不要担心频繁开关connection会影响性能,ADO.NET 数据库连接池会为你维护连接.这样做了你还是觉得你的代码不够美的话,你就有分层的需求了。
      

  2.   

    老大,问你一下,conn.Close()后能不能conn.Dispose();呢?
      

  3.   

    已经有个写好的DBHelper类 里面基本是囊括了所有sql server的操作 是个静态类 每次想用啥方法直接DBHelper.方法名就出来了 连接都写好了 只需要改下你所用的数据库名字就可以了 你上摆渡搜索下 然后在项目里新建个类,把代码拷进去就行了
      

  4.   


    conn.Close()就自动会conn.Dispose,两者是一样的,释放占用的内存资源
      

  5.   

    Close后可以再Dispose(), Dispose里会判断是否需要CloseConnection对象本身不会占用所少资源,关键是它对应非托管资源:真正的数据库连接
    对于一个数据库可用的连接是有限的,在VB时代,由于并发用户很少,需要的连接也不多就出现了lz提到的这种用法,一个程序保持一个连接不断,一直使用它,但随着用户量的增大,这种做法已经被抛弃,因为如果有几百并发用户的话,数据库就吃不消了。 ADO.net的推出就是为了让开发人员习惯连接用完就close的做法。 连接池的概念也在这时显得很重要了,不过对于开发人员连接池是透明的,默认情况下就会使用连接池的。所以,lz还是老老实实的使用局部变量,使用完及时关闭,这是推荐的用法。
      

  6.   

    使用局部变量再多说一句,close和dispose不一样,二者有细微的区别打个比喻,close是店铺打烊,可以开门再来,dispose就是整顿停业了,需要开张才能来使用全局的可以用close,使用局部的,最好dispose掉