0

次のような datagridview ビューがあります。

ProductId| | Name| | Price| |Quantity

データグリッドビューは、すべてのセルが空の状態で始まります。

ユーザーは各列にデータを入力します。ユーザーが入力する製品の数が変化します (不明)。ユーザーは、1 つまたは 5 つの製品のみを入力できます。

したがって、ユーザーが入力する必要があるすべての製品を入力したら、ボタンをクリックすると、すべての製品がデータベースに保存されるようにしたいと考えています。

SQL データベースのテーブルは、データグリッドのように見えます。

ProductId| | Name| | Price| |Quantity

ユーザーが入力する製品の数が不明であるため、データをデータベースに保存するにはどうすればよいですか?

4

1 に答える 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 に答える