2012-07-18 49 views
0

我有一個如下所示的datagridview視圖:對datagridview的多重插入

ProductId | Name | Price | Quantity

datagridview以所有單元格爲空開始。

用戶將在每列中輸入數據。用戶輸入的產品數量發生變化(未知)。用戶只能輸入一個產品或五個產品。

因此,一旦用戶輸入了他必須輸入的所有產品,我希望當他點擊一個按鈕時,所有產品都將被保存到數據庫中。

在SQL數據庫中的表看起來像數據網格:

ProductId | Name | Price | Quantity

由於用戶輸入的產品數量未知,我如何將數據保存到數據庫?

回答

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#應用​​程序創建一個產品列表,並添加當用戶創建一個新的產品項目,並在年底的時候就請跟隨按鈕用戶點擊,然後轉換清單數據表和執行SQL查詢

當用戶點擊新的按鈕來添加產品,那麼使用集合添加項

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

我的其他answer