这个话题可能有点大,一上来都不知道应该起一个如何的标题,才算是能够涵盖今天这篇文章所想表达的中心思想。
公司里实际碰到的情况说起来可能有些复杂,转换个通俗易懂的实际问题来简述吧:如何在C#里展示新闻数据列表?(列表的每一行包括标题和新闻类别,新闻标题和正文的数据属于数据表A,新闻的类别标题属于数据表B)
呵呵,这个问题,可能大家会觉得在ASP世界里的时候,是再小儿科不过得问题了。应该是一上来就会碰到,并掌握的。是的,起初我也是这么认为的,并且带着同样的心态来到C#世界里来看待这个问题的。
然而,随之时间的推移,我发觉,这个问题,在C#里,并没有想象中那么容易。至少是不简单的。
首先,在ASP中,我们都记得只要建立记录集,然后就开始读每条新闻标题数据,然后读到类别ID的时候,再去另外张表中查找该ID相应的类别内容即可。但是,在C#世界里,首先要说的是,的确也可以用同样的方法实现,比如使用SqlDataReader对象来实现,只不过需要频繁打开conn,还要记得及时关闭。即,假如有100条新闻标题和新闻类别需要循环读出,那么至少需要100次的打开关闭类别表连接,外加一次新闻标题所在表的连接。如果不注意关闭,便极其容易瞬间将连接池资源耗尽。
因为这两天碰上过类似问题,所以认识了C#里的DataSet,它的好处是将数据表内容一次性读取出来,保存在内存中,然后瞬间自动关闭连接资源。页面中只要是使用同一个数据库中的资源,则不需要再次连接。DataSet的优势,在处理大数据的时候,将显得尤为突出。就比如100条新闻数据的类别查找和显示问题;又或者是某固定资产登记填写表中,许多个类别下拉框需要加载,而这些类别条目均来自同一数据库中的数据。如果使用SqlDataReader,那么有多少个下拉框,就需要建立多少个conn的打开和关闭,而用了Dataset就一次解决。
这里摘录一段来自一本名为《SQL 2005 数据库系统开发完全手册》中,一个ASP.NET+SQL SERVER 2005的实现物资管理系统的应用实例中的部分代码片段,作为参考:
在DB.cs类中有reDs方法:
public static DataSet reDs(str