C# 在Sql Server 2008上提交数据时,请填写空列

C# 在Sql Server 2008上提交数据时,请填写空列,c#,sql-server,wpf,C#,Sql Server,Wpf,所以我有一个问题,与购物车。我正在尝试将标题和价格列从购物车表(tblCart)中转移出来,并将它们发送到采购项目表(tblPurchaseItem)中。这很好,就像它被认为是。现在的问题是tblPurchaseItem有一个名为PurchaseID的额外列,它不在tblCart中。现在在“签出”按钮上单击此操作。我遇到的问题是,每次从购物车转移表时,我都试图为添加到tblPurchaseItem中的新行设置一个值。假设tblCart添加了一个电影列表,我希望它们在tblPurchaseItem

所以我有一个问题,与购物车。我正在尝试将标题和价格列从购物车表(tblCart)中转移出来,并将它们发送到采购项目表(tblPurchaseItem)中。这很好,就像它被认为是。现在的问题是tblPurchaseItem有一个名为PurchaseID的额外列,它不在tblCart中。现在在“签出”按钮上单击此操作。我遇到的问题是,每次从购物车转移表时,我都试图为添加到tblPurchaseItem中的新行设置一个值。假设tblCart添加了一个电影列表,我希望它们在tblPurchaseItem中具有相同的值。下次有人单击“签出”按钮时,我希望tblCart中的新表被发送到tblPurchaseItem,使其成为最后一个表+1的值。当我尝试此操作时,我的PurchaseID列将保持=为null,并且不接受任何值。任何建议都将不胜感激

以下是我的“签出”按钮代码:


总之,假设当用户单击“Checkout”时发送给tblPurchaseItem的第一个表将被分配purID为1。下次单击“签出”按钮时,我希望将这些值分配给2,依此类推。因此,每个事务都有自己的purID。

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

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

select SCOPE_IDENTITY();

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

我已经对代码进行了大量更新:

    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列,并且只影响该用户的行。

它的设置方式是tblCart,我想这就是您所说的tblPurchase。因此,当用户将一部电影添加到listview(这将是一个签出框)时,每个电影都会存储到tblCart中。一旦用户准备好购买列表中的项目,该列表就会传输到tblPurchaseItem。tblPurchaseItem有4列:ID(递增)、购买ID(我试图用不同于从tblCart收到的每个表的值填充的null)、标题和价格。一切正常。我的问题是如何为发送给tblPurchaseItem的每个表(来自tblCart)分配一个purID值(该值被固定为null;)。我认为我们在这里的最佳实践上存在分歧。我相信您需要另一个表,我自己也尝试过生成唯一的整数ID,您必须非常小心以避免重复。如果你得到了一个副本,那么你最终会把不同的购买混合在一起,这将是可怕的修复。然而,这意味着我将发表另一篇文章,仅仅解决代码错误。:)在这一行之后,SqlCommand cmd2=新的SqlCommand(cmdString2,cn);添加cmd2.ExecuteOnQuery();很好的答案,参数的帮助很大。刚刚进入sql查询和c#,答案是有标记的,非常感谢。
    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();