Sql Server 2008中提交数据时填写空列

本文关键字:数据 Server 2008 提交 Sql | 更新日期: 2023-09-27 18:11:48

所以我有一个问题与购物车。我正试图将标题和价格列从购物车表(tblCart)中转移出来,并将它们发送到已购买的物品表(tblPurchaseItem)中。这工作得很好,就像它应该。现在的问题是,tblPurchaseItem有一个名为PurchaseID的额外列,该列不在tblCart中。现在,点击"Checkout"按钮,这就发生了。我遇到的问题是,每次从购物车转移表时,我都试图为添加到tblPurchaseItem中的新行设置一个值。假设在tblCart中添加了一个电影列表,我希望它们在tblPurchaseItem中都具有相同的值。下一次有人单击"Checkout"按钮时,我希望将来自tblCart的新表发送给tblPurchaseItem,并将其值设置为最后一个表的值+1。当我尝试这样做时,我的PurchaseID列保持= null并且不接受任何值。任何建议将非常感激!

这是我的"Checkout"按钮代码:

        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();

所以总而言之,当用户单击"Checkout"时发送给tblPurchaseItem的第一个表将被分配purID为1。下次单击Checkout按钮时,我希望将这些值赋给2,以此类推。所以每个事务都有自己的purID

Sql Server 2008中提交数据时填写空列

我已经更新了很多代码:

    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();

我的理由是,你的查询太模糊,例如,他们影响整个表不分青红皂白。我还是担心你会转移整个tablecart表并清空它。如果您的系统有多个用户,我想您会希望在购物车中有一个UserID列,并且只影响该用户的行。

如果我理解正确,您需要规范化您的数据库更多。例如,有一个表示单个事务的tblPurchase表,其中tblPurchaseItem包含属于一次购买的所有项目。然后,您的tblPurchase表可以有一个标识int列,该列为您的tblPurchaseItem表提供purchaseID值。当插入

时,可以这样做:
insert into tblPurchase(customerID, orderDate)
values (@customerID, getdate());
select SCOPE_IDENTITY();

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