0

所以我的购物车有问题。我正在尝试将 Title 和 Price 列从购物车表 (tblCart) 中转移出来,并将它们发送到购买的项目表 (tblPurchaseItem) 中。这工作正常,就像它假设的那样。现在的问题是 tblPurchaseItem 有一个名为 PurchaseID 的额外列,它不在 tblCart 中。现在在“结帐”按钮上单击此操作。我遇到的问题是,每次从购物车中转移表时,我都试图为添加到 tblPurchaseItem 中的新行设置一个值。所以说 tblCart 添加了一个电影列表,我希望它们在 tblPurchaseItem 中都具有相同的值。下次有人单击“结帐”按钮时,我希望将 tblCart 中的新表发送到 tblPurchaseItem 作为最后一个 +1 的值。当我尝试这个时,我的 PurchaseID 列保持 = 为 null 并且没有取值。任何建议将不胜感激!

这是我的“结帐”按钮的代码:

        private void Button_Click(object sender, RoutedEventArgs e)
    {
        purID += 1;
        cn.Open();
        String cmdString = "INSERT INTO tblPurchaseItem(Title, Price) Select Title, Price from tblCart";
        String cmdString3 = "DELETE from tblCart";
        String cmdString4 = "Select * from tblPurchaseItem";
        SqlCommand cmd = new SqlCommand(cmdString, cn);
        SqlCommand cmd3 = new SqlCommand(cmdString3, cn);
        SqlCommand cmd4 = new SqlCommand(cmdString4, cn);
        da = new SqlDataAdapter(cmd4);
        dt = new DataTable("tblPurchaseItem");
        da.Fill(dt);
        foreach (DataRow row in dt.Rows)
            {
                String cmdString2 = "UPDATE tblPurchaseItem set PurchaseID = '" + purID + "' where PurchaseID is Null";
                SqlCommand cmd2 = new SqlCommand(cmdString2, cn);
            }
        cmd.ExecuteNonQuery();
        cmd3.ExecuteNonQuery();

所以总而言之,说当用户单击“结帐”时发送到 tblPurchaseItem 的第一个表将被分配 purID 1。下次单击结帐按钮时,我希望将这些值分配给 2,依此类推. 因此,每笔交易都会有自己的 purID。

4

2 回答 2

0

如果我理解正确,您需要进一步规范您的数据库。例如,有一个代表单个交易的 tblPurchase 表,其中 tblPurchaseItem 包含属于一次购买的所有项目。然后,您的 tblPurchase 表可以有一个 identity int 列,它为您的 tblPurchaseItem 表提供 purchaseID 值。插入时可以执行以下操作:

insert into tblPurchase(customerID, orderDate)
values (@customerID, getdate());

select SCOPE_IDENTITY();

您可以使用 ExecuteScalar 运行它,然后使用将行插入 tblPurchaseItem 时返回的 int ID。

于 2013-05-01T04:16:26.303 回答
0

我已经更新了很多代码:

    cn.Open();

    String cmdString = "INSERT INTO tblPurchaseItem(Title, Price, PurchaseID) Select Title, Price, @PurchaseID from tblCart";
    SqlCommand cmd = new SqlCommand(cmdString, cn);
    cmd.Parameters.AddWithValue("@PurchaseID", purID);
    cmd.ExecuteNonQuery();

    String cmdString3 = "DELETE from tblCart";
    SqlCommand cmd3 = new SqlCommand(cmdString3, cn);
    cmd3.ExecuteNonQuery();

我的理由是您的查询过于模糊,例如它们不分青红皂白地影响了整个表。我仍然担心您转移整个 tblCart 表并将其全部清除。如果您的系统有多个用户,我想您会希望购物车中有一个 UserID 列,并且只影响该用户的行。

于 2013-05-01T09:25:41.273 回答