源代码:13033480群共享
首先要提到的是,PetShop代码,通篇都没有使用DataAdapter类,当然也没有使用和它配套的数据集DataSet。
ADO.NET Framework支持两种数据访问模式,一种是使用SqlConnection、SqlCommand和SqlDataReader来访问数据库;一种是使用DataAdapter和DataSet访问数据库。按照《ASP.NET 2.0揭秘》一书的观点,后一种访问模式,会使性能降低,同时会占用大量的硬件资源,“使用DataReader类获取500条记录,比使用DataReader类获取同样的500条记录要快得多。”
使用DataAdapter和DataSet访问数据库,主要特点是,可以把读取和要写入的数据先存放在内存中的数据集DataSet中,然后使用DataAdapter的Fill()和Update()函数,一次性读取或写入到数据库中。PetShop访问数据库,也是采用了这种逻辑,只是用Model中的类,取代了DataSet。
Model中的类,是根据数据库量身定做的数据库,或者说是数据类型。CategoryInfo.cs和ProductInfo.cs都直接是数据库的映射,都可以直接存放相应数据库中的一行数据。而ItemInfo.cs刚灵活地映射了表Cateogry、Product、Item和Invention三个表内联形成的商品的商品信息。
特别提到的是,Model中的类,只可以存放一行数据信息,如果要存放表格数据信息,则要使用列表List,以Category为例,IList<CategoryInfo> categories = new List<CategoryInfo>();定义了一个CategoryInfo的列表,然后,使用DataReader,把读取的数据库信息,一行一行地写入存放在内存中的列表中。
【操作步骤】
一、右击Web→添加新项Web配置文件
二、添加连接字符串
<connectionStrings> <add name="SQLConnString1" connectionString="server=.\SQLEXPRESS;database=NetShop;integrated security=SSPI;min pool size=4;max pool size=4;" providerName="System.Data.SqlClient"/> </connectionStrings>
三、复制Model中的CategoryInfo.c
四、Default.aspx中添加控件ListBox
<div> <asp:ListBox ID="lstCategories" runat="server"> </asp:ListBox> </div>
五、Default.aspx.cx中添加如下代码
public partial class _Default : System.Web.UI.Page { private const string SQL_SELECT_CATEGORIES = "SELECT CategoryId, Name, Descn FROM Category"; protected void Page_Load(object sender, EventArgs e) { IList<CategoryInfo> categories = new List<CategoryInfo>(); //数据库基本操作 String connectionString = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString; SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); conn.Open(); cmd.Connection = conn; cmd.CommandText = SQL_SELECT_CATEGORIES; cmd.CommandType = CommandType.Text; SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); //数据保存到Model中 while (rdr.Read()) { CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2)); categories.Add(cat); } conn.Close(); //数据绑定绑定到用户界面 lstCategories.DataSource = categories; lstCategories.DataTextField = "Name"; lstCategories.DataValueField = "ID";//Model中的字段与数据库表中的字段一样,是不是更好? lstCategories.DataBind(); } }
六、代码中使用了List、ConfigurationManager、Model中的类,需要添加相应的引用,并导入相应的命名空间。
using System.Collections.Generic;
using System.Configuration;
using NetShop.Model;
七、浏览并查看结果
【技术要点】
1、 连接字符串
2、 数据库模型Model
3、IList、List