如下代数据访问类的代码, 明明直接返回DataSet即可以绑定数据, 为何会要把数据都读出来, 放在List中再返回?using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
/// <summary>
/// BookDAL 的摘要说明
/// </summary>
public class BookDAL
{
 public BookDAL()
 {
  //
  // TODO: 在此处添加构造函数逻辑
  //
 }    public static IList<Book> GetPartialBooksBySql(int categoryId, string order)
    {
        string safeSql = "select Id,ISBN,Title,Author,PublisherId,PublishDate,UnitPrice,SubString(ContentDescription,0,200) as ShortContent from Books";
        if (categoryId > 0)
        {
            safeSql += " where CategoryId= " + categoryId;
        }
        if (order.Trim().Length > 0)
        {
            safeSql += " order by " + order;
        }
        return GetPartialBooksBySql(safeSql);    }
    public static IList<Book> GetPartialBooksBySql(String safeSql)
    {
        List<Book> list = new List<Book>();
        DataTable table = DBHelper.GetDataSet(safeSql).Tables[0];
        foreach (DataRow row in table.Rows)
        {
            Book book = new Book();
            book.Id = Convert.ToInt32(row["Id"]);
            book.Title = Convert.ToString(row["Title"]);
            book.Author = Convert.ToString(row["Author"]);            //以下这种方式是判断不确定存在的字段            if (table.Columns.Contains("UnitPrice"))
            {
                book.UnitPrice = Convert.ToDecimal(row["UnitPrice"]);
            }
            if (table.Columns.Contains("ShortContent"))
            {
                book.ContentDescription = Convert.ToString(row["ShortContent"]);
            }
            if (table.Columns.Contains("ISBN"))
            {
                book.ISBN1 = Convert.ToString(row["ISBN"]);
            }
            if (table.Columns.Contains("Clicks"))
            {
                book.Clicks = Convert.ToInt32(row["Clicks"]);            }
            if (table.Columns.Contains("PublishDate"))
            {
                book.PublishDate = Convert.ToDateTime(row["PublishDate"]);
            }
            if (table.Columns.Contains("CategoryId"))
            {
                book.CategoryId = Convert.ToInt32(row["CategoryId"]);
            }
            if (table.Columns.Contains("PublisherId"))
            {
                book.PublisherId = Convert.ToInt32(row["PublisherId"]);
            }
            list.Add(book);
        }
        return list;
    }}

解决方案 »

  1.   

    IList里面放的Book业务对象是强类型
      

  2.   

    List <>使用强类型,减少拆箱和装箱
    List <T>泛型数组 存放的是一个一个的被对象化的数据模型
    类型安全,面向接口编程
      

  3.   

    没啥,只是因为强类型。分工合作的情况,个人只管个人的事情。数据库设计是架构师和DBA的事情,而程序实现人员实际并不关心数据库的结构。
    使用强类型就可以让程序实现人员抛开数据库,他们不必管数据库结构,只管知道入口对象,出口对象是啥就行了(另外一个好处是IDE对强类型的提示比较好,代码编写人员敲代码很容易)而是用datatable使用起来相对起来麻烦,程序实现人员在使用dataTable时不可避免去看数据库的结构
    即使你已经把DAL和数据分开了,但是开发人员在调用的时候,并不能很直观的看到相关字段,他得去看开发文档和数据库结构文档,这样相对比较麻烦。而且弱类型是没有类型的,全体都是object,这样开发人员再调用赋值的时候也很麻烦,他的对照开发文档去转换赋值,保证代码正确。无形又增加一层负担
      

  4.   


    同意。我看到楼主的标题跟所给出的代码严重不同。标题中是IList,而代码中是IList<Book>。楼主连 IList 跟 IList<T> 都分不清,怪不得会写出如此名不副实的问题啊!
      

  5.   

    同意。我看到楼主的标题跟所给出的代码严重不同。标题中是IList,而代码中是IList<Book>。楼主连 IList 跟 IList<T> 都分不清,怪不得会写出如此名不副实的问题啊!
      

  6.   

    简单说 ilist 是效率高!!
      

  7.   

    泛型可以做到强类型的LIST,使用ILIST可以使代码更通用。在三层结构中更容易实现数据层和逻辑层分开。
      

  8.   

    清晰明了
    不用去管数据库字段了,只要对MODEL层对象的属性取值赋值就可以了
    用习惯了,其实感觉还不错!
      

  9.   

    做过数据绑定后, 
    你就知道了 DataTable DataView 实现的那些接口是多么的有用这个问题起始关注焦点的不同.
    programming for what.
      

  10.   

    依赖接口,不依赖实现。OO基本原则,理想的情况下改数据程类型不用改业务和UI代码。
      

  11.   

    我也喜欢用list,返回数据方便,利于接口编程
      

  12.   

    IList<Book> list  = new List<Book>();
    List<Book> list = new List<Book>();
    都是进行了同样的操作 我也很纳闷在实际运作中到底各有什么好处呢???
      

  13.   

    高个鸟。你能直接数据库读出list吗?
      

  14.   

    呵呵。强类型的吧。dataset网络传输效率不高啊。
      

  15.   

    list能动态绑定数据表,同时与gridview的接口比较好,所以我用的也挺多
      

  16.   

    个人感觉IList要好! 因为要对反回的数据进行操作更方便(面向对象)
      

  17.   

    List <>使用强类型,减少拆箱和装箱
    List <T>泛型数组 存放的是一个一个的被对象化的数据模型
    类型安全,面向接口编程