如下代数据访问类的代码, 明明直接返回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;
}}
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;
}}
List <T>泛型数组 存放的是一个一个的被对象化的数据模型
类型安全,面向接口编程
使用强类型就可以让程序实现人员抛开数据库,他们不必管数据库结构,只管知道入口对象,出口对象是啥就行了(另外一个好处是IDE对强类型的提示比较好,代码编写人员敲代码很容易)而是用datatable使用起来相对起来麻烦,程序实现人员在使用dataTable时不可避免去看数据库的结构
即使你已经把DAL和数据分开了,但是开发人员在调用的时候,并不能很直观的看到相关字段,他得去看开发文档和数据库结构文档,这样相对比较麻烦。而且弱类型是没有类型的,全体都是object,这样开发人员再调用赋值的时候也很麻烦,他的对照开发文档去转换赋值,保证代码正确。无形又增加一层负担
同意。我看到楼主的标题跟所给出的代码严重不同。标题中是IList,而代码中是IList<Book>。楼主连 IList 跟 IList<T> 都分不清,怪不得会写出如此名不副实的问题啊!
不用去管数据库字段了,只要对MODEL层对象的属性取值赋值就可以了
用习惯了,其实感觉还不错!
你就知道了 DataTable DataView 实现的那些接口是多么的有用这个问题起始关注焦点的不同.
programming for what.
List<Book> list = new List<Book>();
都是进行了同样的操作 我也很纳闷在实际运作中到底各有什么好处呢???
List <T>泛型数组 存放的是一个一个的被对象化的数据模型
类型安全,面向接口编程