C# 多重插入到datagridview

C# 多重插入到datagridview,c#,sql-server,datagridview,C#,Sql Server,Datagridview,我有一个datagridview视图,如下所示: ProductId|名称|价格|数量 datagridview以所有单元格为空开始 用户将在每个列中输入数据。用户输入的产品数量发生了变化(未知)。用户只能输入一个或五个产品 因此,一旦用户输入了他必须输入的所有产品,我希望当他单击一个按钮时,所有产品都将保存到数据库中 sql数据库中的表类似于datagrid: ProductId|名称|价格|数量 由于用户将输入的产品数量未知,如何将数据保存到数据库?您可以使用表值参数,也可以使用存储过程,只

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

ProductId
|
名称
|
价格
|
数量

datagridview以所有单元格为空开始

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

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

sql数据库中的表类似于datagrid:

ProductId
|
名称
|
价格
|
数量


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

您可以使用表值参数,也可以使用存储过程,只需点击一次数据库即可将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按钮,然后将列表转换为datatable并执行sql查询

当用户单击new按钮添加产品时,使用collection添加项目

   List<Product> _product= new List<Product>
   _product.Add()
    {
     //Bind the gridview columns to the respective fields of the product class
    };
如果您想使用XML存储过程,请参考我的其他

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