标签:自己 security store gets rip www 命名 读取 return
1.使用自动类型推断和对象初始化器优化代码
自动类型推断和初始化器的语法知识请参考【Asp.net入门2-01】C#基本功能
在实验一中,打开Listing.aspx.cs文件,修改GetProducts()方法:
1 protected IEnumerable<Product> GetProducts() 2 { 3 IList<Product> products = new List<Product>(); 4 5 var sql = "select ProductID,Name,Description,Category,Price from Products"; 6 var con = new SqlConnection("Data Source=.;Initial Catalog=SportsStore;Integrated Security=True"); 7 var cmd = new SqlCommand(sql, con); 8 SqlDataReader dr; 9 10 con.Open(); 11 dr = cmd.ExecuteReader(); 12 while (dr.Read()) 13 { 14 var prod = new Product 15 { 16 ProductID = dr.GetInt32(0), 17 Name = dr.GetString(1), 18 Description = dr.GetString(2), 19 Category = dr.GetString(3), 20 Price = dr.GetDecimal(4) 21 }; 22 products.Add(prod); 23 } 24 return products; 25 }
其中,第5、6、7行使用了自动类型推断。第14-21使用了初始化器技术。试用了初始化器,代码比实验一中的代码优雅得多。
2.添加Repository类,将数据操作从页面分离
实验一中,GetProducts()方法里直接使用ADO.NET去访问数据库,试想一下,如果在另外一个页面ProductManage.aspx(如产品管理页面)中也要读取产品列表,那么我们不得不在ProductManage.aspx页面中将上面的代码重新写一遍。同样的代码在程序里多次重复地写,很明显这是不可取的。现在我们不该面功能,只对代码的表现形式重新调整一下。
首先,在SportsStoreEx网站中新增加一个类:Repository。(这里我就不再讲如何给项目添加类了)。添加完之后,项目是这样的:
第二步:编写Repository类的代码
打开Repository.cs文件,添加代码如下:
1 using System.Collections.Generic; 2 using System.Data.SqlClient; 3 4 namespace SportStoreEx 5 { 6 public class Repository 7 { 8 public IEnumerable<Product> Products 9 { 10 get 11 { 12 IList<Product> products = new List<Product>(); 13 14 var sql = "select ProductID,Name,Description,Category,Price from Products"; 15 var con = new SqlConnection("Data Source=.;Initial Catalog=SportsStore;Integrated Security=True"); 16 var cmd = new SqlCommand(sql, con); 17 SqlDataReader dr; 18 19 con.Open(); 20 dr = cmd.ExecuteReader(); 21 while (dr.Read()) 22 { 23 var prod = new Product 24 { 25 ProductID = dr.GetInt32(0), 26 Name = dr.GetString(1), 27 Description = dr.GetString(2), 28 Category = dr.GetString(3), 29 Price = dr.GetDecimal(4) 30 }; 31 products.Add(prod); 32 } 33 return products; 34 } 35 } 36 } 37 }
注意第1、2行将命名空间引用到本文件中来,不引用的话,IEnumerable和SqlConnection等类就没法用。
这样,只要访问Repository类的Products属性,就可以得到数据库Products表中的所有数据了。
3.修改Listing.aspx.cs文件中GetProducts()方法
现在GetProducts()方法里不用自己亲自去数据库读数据了,直接向Repository类对象要Products属性就OK啦!
protected IEnumerable<Product> GetProducts() { Repository repository = new Repository(); return repository.Products; }
4.第一次运行优化后的代码
经过前3个步骤,我们将访问数据的代码移植到Repository类里面了,其它代码均未做修改,现在运行一下,看到如下结果表示你第一次优化成功:
5.
标签:自己 security store gets rip www 命名 读取 return
原文地址:http://www.cnblogs.com/bayes/p/6025971.html