0

我有一个如下所示的 datagridview 视图:

ProductId| Name| Price|Quantity

datagridview 以所有单元格为空开始。

用户将在每一列中输入数据。用户输入的产品数量变化(未知)。用户只能输入一种产品或五种产品。

因此,一旦用户输入了他必须输入的所有产品,我希望当他单击一个按钮时,所有产品都将保存到数据库中。

sql数据库中的表看起来像datagrid:

ProductId| Name| Price|Quantity

由于用户将输入的产品数量未知,如何将数据保存到数据库中?

4

1 回答 1

1

您可以使用表值参数或将 xml 作为输入以进行多次插入的存储过程,只需点击数据库一次即可。

表值参数:-

  CREATE TYPE dbo.ProductType AS TABLE
   ( ProductID int, Name nvarchar(250),Price decimal(10,2),Quantity int )

  CREATE PROCEDURE sp_InsertProducts 
  (@tvpProducts dbo.ProductType READONLY)
  AS
  BEGIN 
  INSERT INTO dbo.Products (ProductID , Name ,Price,Quantity  )
  SELECT a.ProductID ,a.Name ,a.Price, a.Quantity  FROM @tvpProducts AS a;
  END

在您的 C# 应用程序中创建产品列表并在用户创建新产品时添加项目,最后当用户单击 Sumbit 按钮然后将列表转换为数据表并执行您的 sql 查询

当用户单击新按钮添加产品​​时,然后使用集合添加项目

   List<Product> _product= new List<Product>
   _product.Add()
    {
     //Bind the gridview columns to the respective fields of the product class
    };

单击提交按钮时,编写以下代码

   DataTable dtProducts = ConvertListToDataTable(_product);
   SqlCommand cmd = new SqlCommand("sp_InsertProducts", sqlConnection);
   SqlParameter p = cmd.Parameters.AddWithValue("@tvpNewDistricts", dtProducts );
   p.SqlDbType = SqlDbType.Structured;
   p.TypeName = "dbo.ProductType";
   cmd.ExecuteNonQuery();

如果您想使用 XML Stored proc,请参考我的其他答案

于 2012-07-18T16:35:33.110 回答