.NET数据库编程求索之路--4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(3)

简介: 4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(3)   作者:夏春涛 xchunta@163.com 转载请注明来源: http://www.cnblogs.com/SummerRain/archive/2012/07/25/2609144.

4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(3)

 

作者:夏春涛 xchunta@163.com

转载请注明来源: http://www.cnblogs.com/SummerRain/archive/2012/07/25/2609144.html

4.4 数据访问层HomeShop.DAL

OrderDAO.cs

  1  using System;
  2  using System.Collections.Generic;
  3  using System.Linq;
  4  using System.Text;
  5  // 新添命名空间
  6  using System.Data;
  7  using System.Data.SqlClient;
  8  using HomeShop.DbUtility;
  9  using HomeShop.Model;
 10 
 11  namespace HomeShop.DAL
 12 {
 13      public  class OrderDAO 
 14     {
 15          protected SqlDbHelper dbHelper;
 16 
 17          public OrderDAO()
 18         {
 19              this.dbHelper =  new SqlDbHelper();
 20         }
 21 
 22          public OrderDAO( string connectionString)
 23         {
 24              this.dbHelper =  new SqlDbHelper(connectionString);
 25         }
 26 
 27          // 添加
 28           public  int Add(Order order)
 29         {
 30              int rowsCountAffected =  0;
 31             SqlTransaction trans = dbHelper.BeginTransaction();
 32              try
 33             {
 34                  // 新增订单基本信息,并使用SQL的系统函数@@IDENTITY获取新增订单的ID
 35                   string sql =  @" INSERT INTO [Order]([OrderTime],
 36                                                     [OrderStateCode],
 37                                                     [CustomerName],
 38                                                     [CustomerPhoneNo],
 39                                                     [CustomerAddress])
 40                                 VALUES(@OrderTime,
 41                                        @OrderStateCode,
 42                                        @CustomerName,
 43                                        @CustomerPhoneNo,
 44                                        @CustomerAddress)
 45                                 SET @OrderID = @@IDENTITY  ";
 46                  // @OrderID作为传出参数,用于获取新增订单的ID
 47                  SqlParameter paramOrderID =  new SqlParameter( " @OrderID ", SqlDbType.Int);
 48                 paramOrderID.Direction = ParameterDirection.Output;
 49                 SqlParameter[] parameters = {
 50                      new SqlParameter( " @OrderTime ", order.OrderTime),
 51                      new SqlParameter( " @OrderStateCode ", order.OrderStateCode),
 52                      new SqlParameter( " @CustomerName ", order.CustomerName),
 53                      new SqlParameter( " @CustomerPhoneNo ", order.CustomerPhoneNo),
 54                      new SqlParameter( " @CustomerAddress ", order.CustomerAddress),
 55                     paramOrderID};
 56                 rowsCountAffected += dbHelper.ExecuteNonQueryTrans(trans, sql, parameters);
 57                 order.OrderID = ( int)paramOrderID.Value;
 58                  // -----------------------------------------------------------
 59                   // 循环添加订购商品信息
 60                   for ( int i =  0; i < order.OrderItems.Count; i++)
 61                 {
 62                      string sqlX =  @" INSERT INTO [OrderItem]([OrderID],
 63                                                  [Product],
 64                                                  [UnitPrice],
 65                                                  [Quantity])
 66                                      VALUES( @OrderID,
 67                                              @Product,
 68                                              @UnitPrice,
 69                                              @Quantity) ";
 70                     SqlParameter[] parametersX = {
 71                          new SqlParameter( " @OrderID ", order.OrderID),
 72                          new SqlParameter( " @Product ", order.OrderItems[i].Product),
 73                          new SqlParameter( " @UnitPrice ", order.OrderItems[i].UnitPrice),
 74                          new SqlParameter( " @Quantity ", order.OrderItems[i].Quantity)};
 75                     rowsCountAffected += dbHelper.ExecuteNonQueryTrans(trans, sqlX, parametersX);
 76                 }
 77                 trans.Commit(); // 提交数据库事务
 78              }
 79              catch
 80             {
 81                 trans.Rollback(); // 回滚数据库事务
 82                   throw;
 83             }
 84             dbHelper.Close();
 85 
 86              return rowsCountAffected;
 87         }
 88 
 89          // 修改
 90           public  int Update(Order order)
 91         {
 92              int rowsCountAffected =  0;            
 93 
 94             List<SqlCmdTextAndParams> listCmdTextAndParams =  new List<SqlCmdTextAndParams>();
 95              // 修改订单基本信息
 96               string sql =  @"  UPDATE [Order]
 97                              SET [OrderTime] = @OrderTime,
 98                                  [OrderStateCode] = @OrderStateCode,
 99                                  [CustomerName] = @CustomerName,
100                                  [CustomerPhoneNo] = @CustomerPhoneNo,
101                                  [CustomerAddress] = @CustomerAddress
102                              WHERE [OrderID] = @OrderID ";
103             SqlParameter[] parameters = {
104                          new SqlParameter( " @OrderTime ", order.OrderTime),
105                          new SqlParameter( " @OrderStateCode ", order.OrderStateCode),
106                          new SqlParameter( " @CustomerName ", order.CustomerName),
107                          new SqlParameter( " @CustomerPhoneNo ", order.CustomerPhoneNo),
108                          new SqlParameter( " @CustomerAddress ", order.CustomerAddress),
109                          new SqlParameter( " @OrderID ", order.OrderID)};
110             listCmdTextAndParams.Add( new SqlCmdTextAndParams(sql, parameters));
111              // -----------------------------------------------------------
112               // 循环将订购商品信息列表同步更新到数据库中
113               // 删除
114              Order originalOrder =  this.GetSingle(order.OrderID);
115              for( int i= 0;i<originalOrder.OrderItems.Count;i++)
116             {
117                  bool exists = order.OrderItems.Exists(
118                      delegate(OrderItem item){  return (item.OrderItemID == originalOrder.OrderItems[i].OrderItemID);});
119                  if (exists)  continue;
120                 
121                  string sqlX =  @" DELETE FROM [OrderItem]
122                                  WHERE [OrderItemID] = @OrderItemID ";
123                 SqlParameter[] parametersX = {
124                                  new SqlParameter( " @OrderItemID ", originalOrder.OrderItems[i].OrderItemID)};
125                 listCmdTextAndParams.Add( new SqlCmdTextAndParams(sqlX, parametersX));                
126             }
127              // 新增/修改
128              OrderItemDAO orderItemDAO =  new OrderItemDAO();
129              for ( int i =  0; i < order.OrderItems.Count; i++)
130             {
131                  if ( 0 >= order.OrderItems[i].OrderItemID ) // 新增
132                  {
133                      string sqlX =  @" INSERT INTO [OrderItem]([OrderID],
134                                                              [Product],
135                                                              [UnitPrice],
136                                                              [Quantity])
137                                      VALUES( @OrderID,
138                                              @Product,
139                                              @UnitPrice,
140                                              @Quantity) ";
141                     SqlParameter[] parametersX = {
142                                      new SqlParameter( " @OrderID ", order.OrderID),
143                                      new SqlParameter( " @Product ", order.OrderItems[i].Product),
144                                      new SqlParameter( " @UnitPrice ", order.OrderItems[i].UnitPrice),
145                                      new SqlParameter( " @Quantity ", order.OrderItems[i].Quantity)};
146                     listCmdTextAndParams.Add( new SqlCmdTextAndParams(sqlX, parametersX));
147                 }
148                  else // 修改
149                  {
150                      string sqlX =  @" UPDATE [OrderItem]
151                                                  SET [OrderID] = @OrderID,
152                                                      [Product] = @Product,
153                                                      [UnitPrice] = @UnitPrice,
154                                                      [Quantity] = @Quantity
155                                                  WHERE [OrderItemID] = @OrderItemID ";
156                     SqlParameter[] parametersX = {
157                                      new SqlParameter( " @OrderID ", order.OrderID),
158                                      new SqlParameter( " @Product ", order.OrderItems[i].Product),
159                                      new SqlParameter( " @UnitPrice ", order.OrderItems[i].UnitPrice),
160                                      new SqlParameter( " @Quantity ", order.OrderItems[i].Quantity),
161                                      new SqlParameter( " @OrderItemID ", order.OrderItems[i].OrderItemID)};
162                     listCmdTextAndParams.Add( new SqlCmdTextAndParams(sqlX, parametersX));
163                 }
164             }
165             rowsCountAffected = dbHelper.ExecuteNonQueryTrans(listCmdTextAndParams);
166              return rowsCountAffected;
167         }
168         
169          // 删除
170           public  int Delete( int orderID)
171         {
172              string sql =  @" DELETE FROM [OrderItem]
173                             WHERE [OrderID] = @OrderID
174                             
175                             DELETE FROM [Order]
176                             WHERE [OrderID] = @OrderID  ";
177              return dbHelper.ExecuteNonQueryTrans(sql,  new SqlParameter( " @OrderID ", orderID));
178         }
179 
180          // 获取实体对象
181           public Order GetSingle( int orderID)
182         {
183              string sql =  @" SELECT * FROM [Order]
184                             WHERE [OrderID] = @OrderID ";
185             SqlParameter param =  new SqlParameter( " @OrderID ", orderID);
186             DataTable dataTable = dbHelper.ExecuteQuery(sql, param);
187 
188              return RowToModel(dataTable.Rows[ 0]);
189         }
190 
191          // 获取DataTable
192           public DataTable GetTable( string predicate,  params SqlParameter[] parameters)
193         {
194              string sql =  @" SELECT [OrderID],
195                                    [CustomerName],
196                                    [CustomerPhoneNo],
197                                    [CustomerAddress],
198                                    [OrderTime],
199                                    [OrderStateCode],
200                                    [OrderState].[Name] AS [OrderState]
201                              FROM [Order]
202                              LEFT OUTER JOIN [OrderState]
203                              ON [Order].[OrderStateCode] = [OrderState].[Code] ";
204              if ( null != predicate &&  "" != predicate.Trim())
205             {
206                 sql +=  "   WHERE   " + predicate;
207             }
208             sql +=  "  ORDER BY [OrderID] DESC  ";
209              return dbHelper.ExecuteQuery(sql, parameters);
210         }
211 
212          // 获取DataTable
213           public DataTable GetTable()
214         {
215              return GetTable( nullnull);
216         }
217 
218          // 将DataRow转换为实体对象
219           private Order RowToModel(DataRow row)
220         {
221              // ----父表
222              Order order =  new Order();
223             order.OrderID = ( int)row[ " OrderID "];
224             order.CustomerName = row[ " CustomerName "].ToString();
225             order.CustomerPhoneNo = row[ " CustomerPhoneNo "].ToString();
226             order.CustomerAddress = row[ " CustomerAddress "].ToString();
227             order.OrderTime = Convert.ToDateTime(row[ " OrderTime "]);
228             order.OrderStateCode = row[ " OrderStateCode "].ToString();
229              // ----子表----
230              OrderItemDAO orderItemDAO =  new OrderItemDAO();
231             order.OrderItems = orderItemDAO.GetList( " OrderID = @OrderID ",
232                                                      new SqlParameter( " @OrderID ", order.OrderID));
233             
234              return order;
235         }
236 
237     }
238 }

 

OrderItemDAO.cs

 1  using System;
 2  using System.Collections.Generic;
 3  using System.Linq;
 4  using System.Text;
 5  // 新添命名空间
 6  using System.Data;
 7  using System.Data.SqlClient;
 8  using HomeShop.DbUtility;
 9  using HomeShop.Model;
10 
11  namespace HomeShop.DAL
12 {
13      public  class OrderItemDAO
14     {
15          private SqlDbHelper dbHelper;
16 
17          public OrderItemDAO()
18         { 
19              this.dbHelper  =  new SqlDbHelper();
20         }
21 
22          public OrderItemDAO( string connectionString)
23         {
24              this.dbHelper =  new SqlDbHelper(connectionString);
25         }
26 
27          public  bool Exists( int orderItemID)
28         {
29             DataTable dataTable = GetTable( " OrderItemID = @OrderItemID "new SqlParameter( " @OrderItemID ", orderItemID));
30              return ( 0 != dataTable.Rows.Count);
31         }
32 
33          // 获取实体对象列表
34           public List<OrderItem> GetList( string predicate,  params SqlParameter[] parameters)
35         {
36             List<OrderItem> list =  new List<OrderItem>();
37             DataTable dataTable = GetTable(predicate, parameters);
38              for ( int i =  0; i < dataTable.Rows.Count; i++)
39             {
40                 list.Add(RowToModel(dataTable.Rows[i]));
41             }
42 
43              return list;
44         }
45 
46          // 获取DataTable
47           public DataTable GetTable( string predicate,  params SqlParameter[] parameters)
48         {
49              string sql =  @" SELECT [OrderItemID],
50                                    [OrderID],
51                                    [Product],
52                                    [UnitPrice],
53                                    [Quantity],
54                                    [UnitPrice]*[Quantity] AS SubTotal
55                             FROM [OrderItem] ";
56              if ( null != predicate &&  "" != predicate.Trim())
57             {
58                 sql +=  "   WHERE   " + predicate;
59             }
60              return dbHelper.ExecuteQuery(sql, parameters);
61         }
62 
63          // 获取DataTable
64           public DataTable GetTable()
65         {
66              return GetTable( nullnull);
67         }
68 
69          // 将DataRow转换为实体对象
70           private OrderItem RowToModel(DataRow row)
71         {
72             OrderItem orderItem =  new OrderItem();
73             orderItem.OrderID = ( int)row[ " OrderID "];
74             orderItem.OrderItemID = ( int)row[ " OrderItemID "];
75             orderItem.Product = row[ " Product "].ToString();
76             orderItem.Quantity = ( int)row[ " Quantity "];
77             orderItem.UnitPrice = ( decimal)row[ " UnitPrice "];
78 
79              return orderItem;
80         }
81     }
82 }

 

OrderStateDAO.cs

 1  using System;
 2  using System.Collections.Generic;
 3  using System.Linq;
 4  using System.Text;
 5  // 新添命名空间
 6  using System.Data;
 7  using System.Data.SqlClient;
 8  using HomeShop.DbUtility;
 9  using HomeShop.Model;
10 
11  namespace HomeShop.DAL
12 {
13      public  class OrderStateDAO
14     {
15          private SqlDbHelper dbHelper;
16 
17          public OrderStateDAO()
18         { 
19              this.dbHelper  =  new SqlDbHelper();
20         }
21 
22          public OrderStateDAO( string connectionString)
23         {
24              this.dbHelper =  new SqlDbHelper(connectionString);
25         }
26 
27          // 获取DataTable
28           public DataTable GetTable( string predicate,  params SqlParameter[] parameters)
29         {
30              string sql =  @" SELECT * FROM [OrderState] ";
31              if ( null != predicate &&  "" != predicate.Trim())
32             {
33                 sql +=  "   WHERE   " + predicate;
34             }
35             sql +=  "  ORDER BY [Code]  ";
36              return dbHelper.ExecuteQuery(sql, parameters);
37         }
38 
39          // 获取DataTable
40           public DataTable GetTable()
41         {
42              return GetTable( nullnull);
43         }
44     }
45 }

 

 

数据库文件:/Files/SummerRain/NetDbDevRoad/HomeShopDB.rar

完整源代码:/Files/SummerRain/NetDbDevRoad/4使用ADONET实现三层架构Table.rar

 

目录
相关文章
|
20天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
18天前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
18天前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
22天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
68 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
19天前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
27天前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
|
1月前
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
40 2
|
1月前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
90 3
|
1月前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
1月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
218 4

热门文章

最新文章

下一篇
无影云桌面