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
string predicate =
"
OrderID = @OrderID
";
115 SqlParameter param =
new SqlParameter(
"
@OrderID
",order.OrderID);
116 Order originalOrder =
this.GetSingle(predicate, param);
117
for(
int i=
0;i<originalOrder.OrderItems.Count;i++)
118 {
119
bool exists = order.OrderItems.Exists(
120
delegate(OrderItem item){
return (item.OrderItemID == originalOrder.OrderItems[i].OrderItemID);});
121
if (exists)
continue;
122
123
string sqlX =
@"
DELETE FROM [OrderItem]
124
WHERE [OrderItemID] = @OrderItemID
";
125 SqlParameter[] parametersX = {
126
new SqlParameter(
"
@OrderItemID
", originalOrder.OrderItems[i].OrderItemID)};
127 listCmdTextAndParams.Add(
new SqlCmdTextAndParams(sqlX, parametersX));
128 }
129
//
新增/修改
130
OrderItemDAO orderItemDAO =
new OrderItemDAO();
131
for (
int i =
0; i < order.OrderItems.Count; i++)
132 {
133
if (
0 >= order.OrderItems[i].OrderItemID )
//
新增
134
{
135
string sqlX =
@"
INSERT INTO [OrderItem]([OrderID],
136
[Product],
137
[UnitPrice],
138
[Quantity])
139
VALUES( @OrderID,
140
@Product,
141
@UnitPrice,
142
@Quantity)
";
143 SqlParameter[] parametersX = {
144
new SqlParameter(
"
@OrderID
", order.OrderID),
145
new SqlParameter(
"
@Product
", order.OrderItems[i].Product),
146
new SqlParameter(
"
@UnitPrice
", order.OrderItems[i].UnitPrice),
147
new SqlParameter(
"
@Quantity
", order.OrderItems[i].Quantity)};
148 listCmdTextAndParams.Add(
new SqlCmdTextAndParams(sqlX, parametersX));
149 }
150
else
//
修改
151
{
152
string sqlX =
@"
UPDATE [OrderItem]
153
SET [OrderID] = @OrderID,
154
[Product] = @Product,
155
[UnitPrice] = @UnitPrice,
156
[Quantity] = @Quantity
157
WHERE [OrderItemID] = @OrderItemID
";
158 SqlParameter[] parametersX = {
159
new SqlParameter(
"
@OrderID
", order.OrderID),
160
new SqlParameter(
"
@Product
", order.OrderItems[i].Product),
161
new SqlParameter(
"
@UnitPrice
", order.OrderItems[i].UnitPrice),
162
new SqlParameter(
"
@Quantity
", order.OrderItems[i].Quantity),
163
new SqlParameter(
"
@OrderItemID
", order.OrderItems[i].OrderItemID)};
164 listCmdTextAndParams.Add(
new SqlCmdTextAndParams(sqlX, parametersX));
165 }
166 }
167 rowsCountAffected = dbHelper.ExecuteNonQueryTrans(listCmdTextAndParams);
168
return rowsCountAffected;
169 }
170
171
//
删除
172
public
int Delete(Order order)
173 {
174
string sql =
@"
DELETE FROM [OrderItem]
175
WHERE [OrderID] = @OrderID
176
177
DELETE FROM [Order]
178
WHERE [OrderID] = @OrderID
";
179
return dbHelper.ExecuteNonQueryTrans(sql,
new SqlParameter(
"
@OrderID
", order.OrderID));
180 }
181
182
//
获取实体对象列表
183
public List<Order> GetList(
string predicate,
params SqlParameter[] parameters)
184 {
185 List<Order> list =
new List<Order>();
186 DataTable table = GetTable(predicate, parameters);
187
for (
int i =
0; i < table.Rows.Count; i++)
188 {
189 list.Add(RowToModel(table.Rows[i]));
190 }
191
return list;
192 }
193
194
//
获取单一实体对象
195
public Order GetSingle(
string predicate,
params SqlParameter[] parameters)
196 {
197 List<Order> list = GetList(predicate, parameters);
198
if (list.Count ==
1)
199
return list[
0];
200
else
if (list.Count ==
0)
201
return
null;
202
else
203 {
204 Exception ex =
new Exception(
"
满足条件的实体多于1个。
");
205
throw ex;
206 }
207 }
208
209
//
获取DataTable
210
private DataTable GetTable(
string predicate,
params SqlParameter[] parameters)
211 {
212
string sql =
@"
SELECT [OrderID],
213
[CustomerName],
214
[CustomerPhoneNo],
215
[CustomerAddress],
216
[OrderTime],
217
[OrderStateCode],
218
[OrderState].[Name] AS [OrderState]
219
FROM [Order]
220
LEFT OUTER JOIN [OrderState]
221
ON [Order].[OrderStateCode] = [OrderState].[Code]
";
222
if (
null != predicate &&
"" != predicate.Trim())
223 {
224 sql +=
"
WHERE
" + predicate;
225 }
226 sql +=
"
ORDER BY [OrderID] DESC
";
227
return dbHelper.ExecuteQuery(sql, parameters);
228 }
229
230
//
将DataRow转换为实体对象
231
private Order RowToModel(DataRow row)
232 {
233
//
----父表----
234
Order order =
new Order();
235 order.OrderID = (
int)row[
"
OrderID
"];
236 order.CustomerName = row[
"
CustomerName
"].ToString();
237 order.CustomerPhoneNo = row[
"
CustomerPhoneNo
"].ToString();
238 order.CustomerAddress = row[
"
CustomerAddress
"].ToString();
239 order.OrderTime = Convert.ToDateTime(row[
"
OrderTime
"]);
240 order.OrderStateCode = row[
"
OrderStateCode
"].ToString();
241
//
----子表----
242
OrderItemDAO orderItemDAO =
new OrderItemDAO();
243 order.OrderItems = orderItemDAO.GetList(
"
OrderID = @OrderID
",
244
new SqlParameter(
"
@OrderID
", order.OrderID));
245
246
return order;
247 }
248
249 }
250 }
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
//
获取实体对象列表
28
public List<OrderItem> GetList(
string predicate,
params SqlParameter[] parameters)
29 {
30 List<OrderItem> list =
new List<OrderItem>();
31 DataTable dataTable = GetTable(predicate, parameters);
32
for (
int i =
0; i < dataTable.Rows.Count; i++)
33 {
34 list.Add(RowToModel(dataTable.Rows[i]));
35 }
36
37
return list;
38 }
39
40
//
获取DataTable
41
private DataTable GetTable(
string predicate,
params SqlParameter[] parameters)
42 {
43
string sql =
@"
SELECT [OrderItemID],
44
[OrderID],
45
[Product],
46
[UnitPrice],
47
[Quantity],
48
[UnitPrice]*[Quantity] AS SubTotal
49
FROM [OrderItem]
";
50
if (
null != predicate &&
"" != predicate.Trim())
51 {
52 sql +=
"
WHERE
" + predicate;
53 }
54
return dbHelper.ExecuteQuery(sql, parameters);
55 }
56
57
//
将DataRow转换为实体对象
58
private OrderItem RowToModel(DataRow row)
59 {
60 OrderItem orderItem =
new OrderItem();
61 orderItem.OrderID = (
int)row[
"
OrderID
"];
62 orderItem.OrderItemID = (
int)row[
"
OrderItemID
"];
63 orderItem.Product = row[
"
Product
"].ToString();
64 orderItem.Quantity = (
int)row[
"
Quantity
"];
65 orderItem.UnitPrice = (
decimal)row[
"
UnitPrice
"];
66
67
return orderItem;
68 }
69 }
70 }
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
//
获取实体对象列表
28
public List<OrderState> GetList(
string predicate,
params SqlParameter[] parameters)
29 {
30 List<OrderState> list =
new List<OrderState>();
31 DataTable dataTable = GetTable(predicate, parameters);
32
for (
int i =
0; i < dataTable.Rows.Count; i++)
33 {
34 list.Add(RowToModel(dataTable.Rows[i]));
35 }
36
37
return list;
38 }
39
40
//
获取DataTable
41
private DataTable GetTable(
string predicate,
params SqlParameter[] parameters)
42 {
43
string sql =
@"
SELECT * FROM [OrderState]
";
44
if (
null != predicate &&
"" != predicate.Trim())
45 {
46 sql +=
"
WHERE
" + predicate;
47 }
48 sql +=
"
ORDER BY [Code]
";
49
return dbHelper.ExecuteQuery(sql, parameters);
50 }
51
52
//
将DataRow转换为实体对象
53
private OrderState RowToModel(DataRow row)
54 {
55 OrderState orderState =
new OrderState();
56 orderState.Code = row[
"
Code
"].ToString();
57 orderState.Name = row[
"
Name
"].ToString();
58
return orderState;
59 }
60 }
61 }