Вставить данные из ListView в табличный параметр в vb.net

У меня есть этот код в SQL Server 2008, но я пытаюсь вставить данные из моего приложения vb.net - как я могу это сделать?

CREATE procedure [dbo].[PO_INSERT_WITH_LINE_ITEM]  
    (@PO_ID smallint = null output,
     @SUPPLIER_ID smallint,
     @CREATED_BY smallint,
     @CREATION_DATE date,
     @POD dbo.POD_UDT READONLY)
AS
BEGIN
    SET XACT_ABORT, NOCOUNT ON

    BEGIN TRAN;

    INSERT INTO dbo.tbl_purchases_order (SUPPLIER_ID, CREATED_BY, CREATION_DATE, PO_TOTAL)
        SELECT 
            @SUPPLIER_ID, @CREATED_BY, @CREATION_DATE,
            PO_TOTAL = SUM(TOTAL_COST)
        FROM 
            @POD i;

    SELECT @PO_ID = CONVERT(SMALLINT, SCOPE_IDENTITY());

    INSERT INTO dbo.tbl_pucheases_order_detail (PO_ID,PRODUCT_ID, DISCOUNT, UNIT_COST, QTY, TOTAL_BEFORE_DISCOUNT, DISCOUNTED_AMOUNT, TOTAL_COST)
        SELECT 
            @PO_ID, PRODUCT_ID, DISCOUNT, UNIT_COST, QTY,
            TOTAL_BEFORE_DISCOUNT, DISCOUNTED_AMOUNT, TOTAL_COST
        FROM 
            @POD i;

    COMMIT TRAN;
END;

Так можно ли вставить несколько строк из ListView в Vb.net?

Поблагодарить

1 ответ

Согласно документации, вы можете передать TVP как DataTable, DbDataReader или же IEnumerable<SqlDataRecord>, Ниже DataTable пример, который добавляет строку для каждого элемента списка и столбец для каждого подпункта. Измените типы в соответствии с вашими фактическими типами таблиц.

Dim dt = New DataTable
dt.Columns.Add("PO_ID", GetType(Int32))
dt.Columns.Add("PRODUCT_ID", GetType(Int32))
dt.Columns.Add("DISCOUNT", GetType(Decimal))
dt.Columns.Add("UNIT_COST", GetType(Decimal))
dt.Columns.Add("QTY", GetType(Int32))
dt.Columns.Add("TOTAL_BEFORE_DISCOUNT", GetType(Decimal))
dt.Columns.Add("DISCOUNTED_AMOUNT", GetType(Decimal))
dt.Columns.Add("TOTAL_COST", GetType(Decimal))
Dim columnValues(dt.Columns.Count - 1) As Object

For Each lvi As ListViewItem In ListView1.Items
    columnValues(0) = Int32.Parse(lvi.SubItems(0).Text)
    columnValues(1) = Int32.Parse(lvi.SubItems(1).Text)
    columnValues(2) = Decimal.Parse(lvi.SubItems(2).Text)
    columnValues(3) = Decimal.Parse(lvi.SubItems(3).Text)
    columnValues(4) = Int32.Parse(lvi.SubItems(4).Text)
    columnValues(5) = Decimal.Parse(lvi.SubItems(5).Text)
    columnValues(6) = Decimal.Parse(lvi.SubItems(6).Text)
    columnValues(7) = Decimal.Parse(lvi.SubItems(7).Text)
    dt.Rows.Add(columnValues)
Next

Using connection As New SqlConnection(connectionString)
    Using command As New SqlCommand("dbo.PO_INSERT_WITH_LINE_ITEM", connection)
        command.CommandType = CommandType.StoredProcedure
        connection.Open()
        'add other parameters here
        'add TVP parameter
        Dim tvpParameter = command.Parameters.Add("@tvp", SqlDbType.Structured)
        tvpParameter.Value = dt
        command.ExecuteNonQuery()
        'get output parameter value here
    End Using
End Using
Другие вопросы по тегам