大家好,我刚开始学做网页,有一个问题不明白了。我在自己尝试做一个新闻系统,我想知道在新闻首页显示新闻的时候,不同类别板块(比如国际、国内新闻,社会、教育等等)显示的列表是否都要分别连接一次数据库。
比如我有100个分类,我是连接100次数据库来得到?还是1次连接取出所有需要的数据再分类?如果1次读取了这么才能在表现层分类呢。
这样会不会对数据库性能有很大影响,是否有办法一次连接在显示的时候按类别显示
,一般网站怎么处理这个问题。
我在一本英文的asp.net电子书上看到作者说“数据库连接就像炸弹,迫不得已才拿起来,然后赶紧关闭丢出去”,虽然夸张了一点,但是我觉得很有意思。

解决方案 »

  1.   

    以dataset为例 在存储过程中一次返回多个结果集就行(用多个select分类)  在Dataset里就 是:dataset.table[0],dataset.table[1].....
      

  2.   

    首先回答你第一个问题:最好将所有新闻都放在同一个数据库中,加上分类字段以区别各类。使用的时候只要连接一个数据库,然后用sql语句挑选需要的类别(毕竟你显示在新闻首页的数据量不会很大)。至于怎么才能在表现层分类,那无非就是select * where *......等等。
        第二个问题,不用担心频繁连接的问题,对.net程序而言,默认为允许连接池,当然也可以在SQLConnection对象的连接字符串中加入"Pooling = true"确保程序允许连接池的使用。
        也许你还不明白什么是连接池,数据库的连接池允许程序从中获得一个连接并使用这个连接,而不需要为每一个连接请求重新创建数据库连接。当应用程序使用完连接后,改连接被归还给连接池而不是直接释放。这样性能就大大提高了。
        这里必须强调一点,连接对象使用完毕后应当调用Close或Dispose方法将其显示的关闭并返回给连接池,而不是依靠垃圾收集器来释放连接。
        呵呵,写的累死了,我的CSDN第一帖就献给你了。
      

  3.   

    看了上面几个同志的回复,感觉有些地方不是太可取.首先我感觉用dataset对服务器的开销很大,这与dataset的实现机制有关,而RobbyShao所说的方法又与OO思想相违背.我的建议是用reader然后映射到实体类上,根据业务做出领域模型,最后在显示层调用
      

  4.   

    各位回答都很专业。
    我现在是将所有内容放在一个表中,然后根据一个CatID字段来判断分类,然后每个分类都分别Conn.Open, 存储过程中Select * from Table where CatId=XX, 后 Conn.Close 。我觉得如果分类太多的话这样太占用连接资源了,所以来问问各位高手的意见。
    总之多谢大家鼎立相助。
      

  5.   

    小可飞刀兄的“用reader然后映射到实体类上”我不懂,能否赐教,学习学习,谢谢