<%-- 進階開發篇:Commerce Starter Kit 可抄的寶在那裡?
*

ASP.NET Starter Kit 挖寶記專欄:

進階開發篇:Commerce Starter Kit 可抄的寶在那裡?

作者:周世雄

2003 年 12 月

本文說明如何使用美國微軟公司所開發、免費、又開放原始程式碼的 ASP.NET Starter Kit 中之 Commerce Starter Kit (電子商務入門套件),適合程式設計師 (Developer) 學習線上購物的設計技巧。

加入商品到購物車動作原理

加入商品到購物車時執行 AddToCart.aspx,當網頁載入時將執行 Page_Load(),其中呼叫 ShoppingCartDB.vb 的 GetShoppingCartId() 取得使用者的 shopping cart ID,再呼叫 AddItem() 加商品資料到購物車資料庫:

'新增商品項目到購物車
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 
Handles MyBase.Load
 If Not Request.Params("ProductID") Is Nothing Then
   Dim cart As ASPNET.StarterKit.Commerce.ShoppingCartDB = 
   New ASPNET.StarterKit.Commerce.ShoppingCartDB()

   '取得使用者的shopping cart ID 
   Dim cartId As String = cart.GetShoppingCartId()

   '新增商品項目到購物車
   cart.AddItem(cartId, CInt(Request.Params("ProductID")), 1)
 End If
 Response.Redirect("ShoppingCart.aspx")
End Sub

其中 ShoppingCartDB.vb 的 AddItem() 執行預存程序 CMRC_ShoppingCartAddItem,加資料到購物車資料庫:

Public Sub AddItem(ByVal cartID As String, ByVal productID As Integer, ByVal quantity As Integer)
  '由Web.Config取得資料庫連線字串, 設定預存程序名稱
  Dim myConnection As SqlConnection = 
  New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
  Dim myCommand As SqlCommand = New SqlCommand("CMRC_ShoppingCartAddItem", myConnection)

  '設定命令為預存程序
  myCommand.CommandType = CommandType.StoredProcedure

  '輸入預存程序輸入參數值
  
  Dim parameterProductID As SqlParameter = New SqlParameter("@ProductID", SqlDbType.Int, 4)
  parameterProductID.Value = productID
  myCommand.Parameters.Add(parameterProductID)

  Dim parameterCartID As SqlParameter = New SqlParameter("@CartID", SqlDbType.NVarChar, 50)
  parameterCartID.Value = cartID
  myCommand.Parameters.Add(parameterCartID)

  Dim parameterQuantity As SqlParameter = New SqlParameter("@Quantity", SqlDbType.Int, 4)
  parameterQuantity.Value = quantity
  myCommand.Parameters.Add(parameterQuantity)

  '連線資料庫並執行預存程序
  myConnection.Open()
  myCommand.ExecuteNonQuery()
  myConnection.Close()
End Sub

預存程序 CMRC_ShoppingCartAddItem,若購物車已經有此商品則更新數量,若購物車尚無此商品則新增記錄到 CMRC_ShoppingCart 資料表中:

CREATE Procedure CMRC_ShoppingCartAddItem
(
    @CartID nvarchar(50),
    @ProductID int,
    @Quantity int
)
As
DECLARE @CountItems int
SELECT @CountItems = Count(ProductID)
FROM CMRC_ShoppingCart
WHERE ProductID = @ProductID AND CartID = @CartID

IF @CountItems > 0  /* 若購物車已經有此商品則更新數量 */
    UPDATE CMRC_ShoppingCart
    SET Quantity = (@Quantity + CMRC_ShoppingCart.Quantity)
    WHERE ProductID = @ProductID AND CartID = @CartID

ELSE  /* 若購物車尚無此商品則新增記錄 */
    INSERT INTO CMRC_ShoppingCart(CartID, Quantity, ProductID)
    VALUES(@CartID, @Quantity, @ProductID)
GO

購物車動作原理

購物車如下圖:

購物車程式 ShoppingCart.aspx,包括 DataGrid 控制項:

<asp:DataGrid id="MyList" runat="server" Font-Names="Verdana" AutoGenerateColumns="False" 
  DataKeyField="Quantity" AlternatingItemStyle-CssClass="CartListItemAlt" 
  ItemStyle-CssClass="CartListItem" FooterStyle-CssClass="CartListFooter" 
  HeaderStyle-CssClass="CartListHead" ShowFooter="True" Font-Size="8pt" 
  Font-Name="Verdana" cellpadding="4" GridLines="Vertical" BorderColor="Black">
  <AlternatingItemStyle CssClass="CartListItemAlt"></AlternatingItemStyle>
  <ItemStyle CssClass="CartListItem"></ItemStyle>
  <HeaderStyle CssClass="CartListHead"></HeaderStyle>
  <FooterStyle CssClass="CartListFooter"></FooterStyle>
  <Columns>
   <asp:TemplateColumn HeaderText="產品編號">
    <ItemTemplate>
      <asp:Label id="ProductID" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, 
      "ProductID") %>' />
    </ItemTemplate>
   </asp:TemplateColumn>
  
   <asp:BoundColumn DataField="ModelName" HeaderText="產品名稱"></asp:BoundColumn>
   <asp:BoundColumn DataField="ModelNumber" HeaderText="型號"></asp:BoundColumn>
  
   <asp:TemplateColumn HeaderText="數量">
    <ItemTemplate>
     <asp:TextBox id="Quantity" runat="server" Columns="4" MaxLength="3" 
     Text='<%# DataBinder.Eval(Container.DataItem, "Quantity") %>' width="40px" />
    </ItemTemplate>
   </asp:TemplateColumn>
  
   <asp:BoundColumn DataField="UnitCost" HeaderText="價格" DataFormatString="{0:c}">
   </asp:BoundColumn>
   <asp:BoundColumn DataField="ExtendedAmount" HeaderText="小計" DataFormatString="{0:c}">
   </asp:BoundColumn>
  
   <asp:TemplateColumn HeaderText="刪除">
    <ItemTemplate>
     <center>
      <asp:CheckBox id="Remove" runat="server" />
     </center>
    </ItemTemplate>
   </asp:TemplateColumn>
  </Columns>
</asp:DataGrid>

當網頁載入時將執行 Page_Load(),從資料庫的取得購物車的資料後,再資料繫結 ProductID(商品編號)、ModelName(產品名稱)、ModelNumber(型號)、Quantity(數量)、UnitCost(價格) 欄位到 DataList 控制項,當呼叫 DataBind() 時執行 Web 使用者控制項的「<%# … %>」部份。

Page_Load() 中呼叫 PopulateShoppingCartList:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 
Handles MyBase.Load
  If Page.IsPostBack = False Then
    '資料繫結購物車(Shopping Cart)以顯示
    PopulateShoppingCartList()
  End If
End Sub

其中 PopulateShoppingCartList 資料繫結購物明細到 DataGrid 購物車以更新顯示:

Sub PopulateShoppingCartList()
  Dim cart As ASPNET.StarterKit.Commerce.ShoppingCartDB = 
  New ASPNET.StarterKit.Commerce.ShoppingCartDB()

  '取得使用者的shopping cart ID
  Dim cartId As String = cart.GetShoppingCartId()

  '若購物車無項目則顯示訊息
  If cart.GetItemCount(cartId) = 0 Then
   DetailsPanel.Visible = False
   MyError.Text = "目前在您的購物車中沒有任何項目。"
  Else
   '資料繫結shoppingcart購物明細
   MyList.DataSource = cart.GetItems(cartId)
   MyList.DataBind()

   '更新總金額
   lblTotal.Text = String.Format("{0:c}", cart.GetTotal(cartId))
  End If
End Sub

其中 ShoppingCartDB.vb 的 GetItems() 執行預存程序 CMRC_ShoppingCartList,取得購物車資料庫的資料:

Public Function GetItems(ByVal cartID As String) As SqlDataReader
 '由Web.Config取得資料庫連線字串, 設定預存程序名稱
 Dim myConnection As SqlConnection = 
 New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
 Dim myCommand As SqlCommand = New SqlCommand("CMRC_ShoppingCartList", myConnection)

 '設定命令為預存程序
 myCommand.CommandType = CommandType.StoredProcedure

 '輸入預存程序輸入參數值
 Dim parameterCartID As SqlParameter = New SqlParameter("@CartID", SqlDbType.NVarChar, 50)
 parameterCartID.Value = cartID
 myCommand.Parameters.Add(parameterCartID)

 '連線資料庫並執行預存程序
 myConnection.Open()
 Dim result As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)

 '傳回datareader結果
 Return result
End Function

預存程序 CMRC_ShoppingCartList,從 CMRC_ShoppingCart 資料表中取得購物車記錄:

CREATE Procedure CMRC_ShoppingCartList
(
    @CartID nvarchar(50)
)
AS
SELECT 
    CMRC_Products.ProductID, CMRC_Products.ModelName,
    CMRC_Products.ModelNumber, CMRC_ShoppingCart.Quantity,
    CMRC_Products.UnitCost,
    Cast((CMRC_Products.UnitCost * CMRC_ShoppingCart.Quantity) as money) as ExtendedAmount
FROM CMRC_Products, CMRC_ShoppingCart
WHERE CMRC_Products.ProductID = CMRC_ShoppingCart.ProductID
  AND CMRC_ShoppingCart.CartID = @CartID
ORDER BY CMRC_Products.ModelName, CMRC_Products.ModelNumber
GO

更新購物車動作原理

當更改購物車的商品數量或刪除後,按下 [Update Your Shopping Cart] 按鈕後將執行 UpdateShoppingCartDatabase():

'更新購物車(Shopping Cart)資料庫
Sub UpdateShoppingCartDatabase()
  Dim cart As ASPNET.StarterKit.Commerce.ShoppingCartDB = 
  New ASPNET.StarterKit.Commerce.ShoppingCartDB()

  '取得使用者的shopping cart ID
  Dim cartId As String = cart.GetShoppingCartId()

  '循環取得購物車商品明細
  Dim i As Integer
  For i = 0 To MyList.Items.Count - 1

   '取得row's controls references 
   Dim quantityTxt As TextBox = CType(MyList.Items(i).FindControl("Quantity"), TextBox)
   Dim remove As CheckBox = CType(MyList.Items(i).FindControl("Remove"), CheckBox)

   Dim quantity As Integer
   Try
    quantity = CInt(quantityTxt.Text)

    '若數量有變動, 或勾選刪除
    If quantity <> CInt(MyList.DataKeys(i)) Or remove.Checked = True Then

     Dim lblProductID As Label = CType(MyList.Items(i).FindControl("ProductID"), Label)

     If quantity = 0 Or remove.Checked = True Then
      '若數量為0, 或勾選刪除則移除此項目
      cart.RemoveItem(cartId, CInt(lblProductID.Text))
     Else
      '更新項目
      cart.UpdateItem(cartId, CInt(lblProductID.Text), quantity)
     End If
    End If
   Catch
    MyError.Text = "部份輸入有誤."
   End Try
  Next
End Sub

結帳動作原理

當結帳按下 [Final Check Out] 按鈕後將執行 CheckoutBtn_Click(),首先執行 UpdateShoppingCartDatabase 先更新購物車,再導向結帳 Checkout.aspx 程式:

Private Sub CheckoutBtn_Click(ByVal sender As Object, 
ByVal e As System.Web.UI.ImageClickEventArgs) Handles CheckoutBtn.Click
  '更新購物車(Shopping Cart)
  UpdateShoppingCartDatabase()

  Dim cart As ASPNET.StarterKit.Commerce.ShoppingCartDB = 
  New ASPNET.StarterKit.Commerce.ShoppingCartDB()

  '計算shopping cart ID
  Dim cartId As String = cart.GetShoppingCartId()

  '若購物車不是空的, 則導向買單(checkout)網頁
  If cart.GetItemCount(cartId) <> 0 Then
   Response.Redirect("Checkout.aspx")
  Else
   MyError.Text = "購物車是空的, 不能買單."
  End If
End Sub

結帳 Checkout.aspx 程式,包括 DataGrid 控制項:

<asp:DataGrid id="MyDataGrid" width="90%" BorderColor="Black" GridLines="Vertical" 
cellpadding="4" Font-Name="Verdana" Font-Size="8pt" ShowFooter="True" 
HeaderStyle-CssClass="CartListHead" FooterStyle-CssClass="cartlistfooter" 
ItemStyle-CssClass="CartListItem" AlternatingItemStyle-CssClass="CartListItemAlt" 
AutoGenerateColumns="False" runat="server" Font-Names="Verdana">
  <AlternatingItemStyle CssClass="CartListItemAlt"></AlternatingItemStyle>
  <ItemStyle CssClass="CartListItem"></ItemStyle>
  <HeaderStyle CssClass="CartListHead"></HeaderStyle>
  <FooterStyle CssClass="cartlistfooter"></FooterStyle>

  <Columns>
   <asp:BoundColumn DataField="ModelName" HeaderText="產品名稱"></asp:BoundColumn>
   <asp:BoundColumn DataField="ModelNumber" HeaderText="型號號碼"></asp:BoundColumn>
   <asp:BoundColumn DataField="Quantity" HeaderText="數量"></asp:BoundColumn>
   <asp:BoundColumn DataField="UnitCost" HeaderText="價格" DataFormatString="{0:c}">
   </asp:BoundColumn>
   <asp:BoundColumn DataField="ExtendedAmount" HeaderText="小計" DataFormatString="{0:c}">
   </asp:BoundColumn>
  </Columns>
</asp:DataGrid>

當網頁載入時將執行 Page_Load(),ShoppingCartDB.vb 的 GetItems() 執行預存程序 CMRC_ShoppingCartList,取得購物車資料庫的資料從資料庫的取得購物車的資料後,再資料繫結 ModelName(產品名稱)、ModelNumber(型號)、Quantity(數量)、UnitCost(價格) 欄位到 DataList 控制項顯示結帳清單:

Private Sub Page_Load(ByVal sender As System.Object, 
ByVal e As System.EventArgs) Handles MyBase.Load
 If Page.IsPostBack = False Then
   '取得shopping cart ID
   Dim cart As ASPNET.StarterKit.Commerce.ShoppingCartDB = 
   New ASPNET.StarterKit.Commerce.ShoppingCartDB()
   Dim cartId As String = cart.GetShoppingCartId()

   '結帳商品列表
   MyDataGrid.DataSource = cart.GetItems(cartId)
   MyDataGrid.DataBind()

   '更新總金額
   TotalLbl.Text = String.Format("{0:c}", cart.GetTotal(cartId))
 End If
End Sub

當結帳按下 [Submit] 按鈕後將執行 SubmitBtn_Click(),執行 PlaceOrder() 下訂單:

Private Sub SubmitBtn_Click(ByVal sender As Object, 
ByVal e As System.Web.UI.ImageClickEventArgs) Handles SubmitBtn.Click
  Dim cart As ASPNET.StarterKit.Commerce.ShoppingCartDB = 
  New ASPNET.StarterKit.Commerce.ShoppingCartDB()

  '取得shopping cart ID
  Dim cartId As String = cart.GetShoppingCartId()

  '取得customerID
  Dim customerId As String = User.Identity.Name

  If (Not cartId Is Nothing) And (Not customerId Is Nothing) Then

   '下訂單(Place the order)
   Dim ordersDatabase As ASPNET.StarterKit.Commerce.OrdersDB = 
   New ASPNET.StarterKit.Commerce.OrdersDB()
   Dim orderId As Integer = ordersDatabase.PlaceOrder(customerId, cartId)

   Header.Text = "結帳完畢(Check Out Complete)!"
   Message.Text = "<b>您的訂單代號(Order Number)為: </b>" & orderId
   SubmitBtn.Visible = False
  End If
End Sub

OrdersDB.vb 的 PlaceOrder() 執行預存程序 CMRC_OrdersAdd:

Public Function PlaceOrder(ByVal customerID As String, ByVal cartID As String) As Integer
  '由Web.Config取得資料庫連線字串, 設定預存程序名稱
  Dim myConnection As SqlConnection = 
  New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
  Dim myCommand As SqlCommand = New SqlCommand("CMRC_OrdersAdd", myConnection)

  '設定命令為預存程序
  myCommand.CommandType = CommandType.StoredProcedure

  '輸入預存程序輸入參數值
  Dim parameterCustomerID As SqlParameter = New SqlParameter("@CustomerID", SqlDbType.Int, 4)
  parameterCustomerID.Value = CInt(customerID)
  myCommand.Parameters.Add(parameterCustomerID)

  Dim parameterCartID As SqlParameter = New SqlParameter("@CartID", SqlDbType.NVarChar, 50)
  parameterCartID.Value = cartID
  myCommand.Parameters.Add(parameterCartID)

  Dim parameterShipDate As SqlParameter = New SqlParameter("@ShipDate", SqlDbType.DateTime, 8)
  parameterShipDate.Value = CalculateShippingDate(customerID, cartID)
  myCommand.Parameters.Add(parameterShipDate)

  Dim parameterOrderDate As SqlParameter = New SqlParameter("@OrderDate", SqlDbType.DateTime, 8)
  parameterOrderDate.Value = DateTime.Now
  myCommand.Parameters.Add(parameterOrderDate)

  '預存程序輸出參數
  Dim parameterOrderID As SqlParameter = New SqlParameter("@OrderID", SqlDbType.Int, 4)
  parameterOrderID.Direction = ParameterDirection.Output
  myCommand.Parameters.Add(parameterOrderID)

  '連線資料庫並執行預存程序
  myConnection.Open()
  myCommand.ExecuteNonQuery()
  myConnection.Close()

  '傳回OrderID
  Return CInt(parameterOrderID.Value)
End Function

預存程序 CMRC_OrdersAdd,首先新增資料到訂單資料表 CMRC_Orders,接著複製購物車資料到訂單明細資料表 CMRC_OrderDetails,最後移除購物車資料:

CREATE Procedure CMRC_OrdersAdd
(
    @CustomerID int,
    @CartID     nvarchar(50),
    @OrderDate  datetime,        
    @ShipDate   datetime,
    @OrderID    int OUTPUT
)
AS
BEGIN TRAN AddOrder

/* 新增資料到訂單資料表CMRC_Orders */
INSERT INTO CMRC_Orders(CustomerID, OrderDate, ShipDate)
VALUES(@CustomerID, @OrderDate, @ShipDate)
SELECT @OrderID = @@Identity    

/* 複製購物車資料到訂單明細資料表CMRC_OrderDetails */
INSERT INTO CMRC_OrderDetails(OrderID, ProductID, Quantity, UnitCost)
SELECT @OrderID, CMRC_ShoppingCart.ProductID, 
    Quantity, CMRC_Products.UnitCost
FROM CMRC_ShoppingCart 
  INNER JOIN CMRC_Products ON CMRC_ShoppingCart.ProductID = CMRC_Products.ProductID
WHERE CartID = @CartID

/* 移除購物車資料 */
EXEC CMRC_ShoppingCartEmpty @CartID

COMMIT TRAN AddOrder
GO

學會了嗎?

Web Services 查詢訂單動作原理

Commerce Starter Kit 可以由其他應用程式透過Web Services送出訂單、查詢訂單。InstantOrder.asmx 程式負責這兩個動作。由其他應用程式透過 Web Services 查詢訂單的程式為 InstantOrder.asmx 中的 CheckStatus():

'透過Web Services查詢訂單
 _
Public Function CheckStatus(ByVal userName As String, ByVal password As String, 
ByVal orderID As Integer) As ASPNET.StarterKit.Commerce.OrderDetails

  '驗證使用者身份
  Dim accountSystem As ASPNET.StarterKit.Commerce.CustomersDB = 
  New ASPNET.StarterKit.Commerce.CustomersDB()
  Dim customerId As String = 
  accountSystem.Login(userName, ASPNET.StarterKit.Commerce.Security.Encrypt(password))

  If customerId = "" Then
   '驗證失敗
   Throw New Exception("Error: Invalid Login!")
  End If

  '傳回此訂單之明細
  Dim orderSystem As ASPNET.StarterKit.Commerce.OrdersDB = 
  New ASPNET.StarterKit.Commerce.OrdersDB()
  Return orderSystem.GetOrderDetails(orderID, customerId)
End Function

OrdersDB.vb 的 GetOrderDetails() 執行預存程序 CMRC_OrdersDetail,從資料庫取得資料傳回到 DataSet:

Public Function GetOrderDetails(ByVal orderID As Integer, ByVal customerID As String) 
As OrderDetails

 '由Web.Config取得資料庫連線字串, 設定預存程序名稱
 Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
 Dim myCommand As New SqlDataAdapter("CMRC_OrdersDetail", myConnection)

 '設定命令為預存程序
 myCommand.SelectCommand.CommandType = CommandType.StoredProcedure

 '輸入預存程序輸入參數值
 Dim parameterOrderID As New SqlParameter("@OrderID", SqlDbType.Int, 4)
 parameterOrderID.Value = orderID
 myCommand.SelectCommand.Parameters.Add(parameterOrderID)

 Dim parameterCustomerID As New SqlParameter("@CustomerID", SqlDbType.Int, 4)
 parameterCustomerID.Value = Int32.Parse(customerID)
 myCommand.SelectCommand.Parameters.Add(parameterCustomerID)

 '預存程序輸出參數
 Dim parameterOrderDate As New SqlParameter("@OrderDate", SqlDbType.DateTime, 8)
 parameterOrderDate.Direction = ParameterDirection.Output
 myCommand.SelectCommand.Parameters.Add(parameterOrderDate)

 '預存程序輸出參數
 Dim parameterShipDate As New SqlParameter("@ShipDate", SqlDbType.DateTime, 8)
 parameterShipDate.Direction = ParameterDirection.Output
 myCommand.SelectCommand.Parameters.Add(parameterShipDate)

 '預存程序輸出參數
 Dim parameterOrderTotal As New SqlParameter("@OrderTotal", SqlDbType.Money, 8)
 parameterOrderTotal.Direction = ParameterDirection.Output
 myCommand.SelectCommand.Parameters.Add(parameterOrderTotal)

 '取得資料儲存到DataSet
 Dim myDataSet As New DataSet()
 myCommand.Fill(myDataSet, "OrderItems")

 If Not parameterShipDate.Value Is DBNull.Value Then
   Dim myOrderDetails As New OrderDetails()
   myOrderDetails.OrderDate = CType(parameterOrderDate.Value, DateTime)
   myOrderDetails.ShipDate = CType(parameterShipDate.Value, DateTime)
   myOrderDetails.OrderTotal = CDec(parameterOrderTotal.Value)
   myOrderDetails.OrderItems = myDataSet

   '傳回DataSet
   Return myOrderDetails
 Else
   Return Nothing
 End If
End Function

預存程序 CMRC_OrdersDetail,從 CMRC_Orders 資料表中取得訂單的詳細資訊:

CREATE Procedure CMRC_OrdersDetail
(
    @OrderID int, @CustomerID int, @OrderDate  datetime OUTPUT,
    @ShipDate datetime OUTPUT, @OrderTotal money OUTPUT
)
AS
SELECT @OrderDate = OrderDate, @ShipDate = ShipDate
FROM CMRC_Orders
WHERE OrderID = @OrderID AND CustomerID = @CustomerID

IF @@Rowcount = 1
  BEGIN
    SELECT  
    @OrderTotal = Cast(SUM(CMRC_OrderDetails.Quantity * CMRC_OrderDetails.UnitCost) as money)
FROM CMRC_OrderDetails WHERE OrderID= @OrderID
SELECT CMRC_Products.ProductID, CMRC_Products.ModelName,
    CMRC_Products.ModelNumber, CMRC_OrderDetails.UnitCost,
    CMRC_OrderDetails.Quantity,
    (CMRC_OrderDetails.Quantity * CMRC_OrderDetails.UnitCost) as ExtendedAmount
FROM CMRC_OrderDetails
  INNER JOIN CMRC_Products ON CMRC_OrderDetails.ProductID = CMRC_Products.ProductID
  
    WHERE OrderID = @OrderID
  END
GO

學會了嗎?

Web Services 送出訂單動作原理

由其他應用程式透過 Web Services 送出訂單的程式為 InstantOrder.asmx 中的 OrderItem():

'透過Web Services下訂單
 _
Public Function OrderItem(ByVal userName As String, ByVal password As String, 
ByVal productID As Integer, ByVal quantity As Integer) As ASPNET.StarterKit.Commerce.OrderDetails

  '驗證使用者身份
  Dim accountSystem As ASPNET.StarterKit.Commerce.CustomersDB = 
  New ASPNET.StarterKit.Commerce.CustomersDB()
  Dim customerId As String = accountSystem.Login(userName, ASPNET.StarterKit.
  Commerce.Security.Encrypt(password))

  If customerId Is Nothing Then
   '驗證失敗
   Throw New Exception("Error: Invalid Login!")
  End If

  Dim qty As Integer = System.Math.Abs(quantity)
  If qty = quantity And qty < 1000 Then
    '新增項目到購物車
    Dim myShoppingCart As ASPNET.StarterKit.Commerce.ShoppingCartDB = 
    New ASPNET.StarterKit.Commerce.ShoppingCartDB()
    myShoppingCart.AddItem(customerId, productID, quantity)

    '下訂單
    Dim orderSystem As ASPNET.StarterKit.Commerce.OrdersDB = 
    New ASPNET.StarterKit.Commerce.OrdersDB()
    Dim orderID As Integer = orderSystem.PlaceOrder(customerId, customerId)

    '傳回訂單明細
    Return orderSystem.GetOrderDetails(orderID, customerId)
  Else
    ' invalid input
    Return Nothing
  End If
End Function

ShoppingCartDB.vb 的 AddItem(),新增項目到購物車。OrdersDB.vb的PlaceOrder(),下訂單。OrdersDB.vb 的GetOrderDetails(),從資料庫取得訂單的詳細資料傳回到 DataSet。

學會了嗎?

Commerce Starter Kit 下載

Commerce Starter Kit 英文版軟體可到以下網址免費下載與使用,包括原始碼:
http://www.asp.net/Default.aspx?tabindex=9&tabid=47

ASP.NET Starter Kit 中文版

ASP.NET Starter Kit 中文版軟體可到「MSDN 下載專區」,分次免費下載與使用:
http://www.microsoft.com/taiwan/msdn/downloads/default.htm

或是透過 MSDN Subscription 附贈的 .NET 企業網站錦囊,一次取得所有中文版入門套件與架構白皮書,請參閱:
http://www.microsoft.com/taiwan/msdn/promo/


意見與支援

 您有任何問題、意見或建議嗎?您可以透過下列電子郵件與作者連絡:
 jack.chou2@msa.hinet.net

更多資訊

想知道 .NET 挖寶記專欄的其他文章嗎?請至此專欄所有列表

--%>