2017-12-30 47 views
-1

このコードはSQL Server 2008にありますが、私はvb.netアプリケーションからデータを挿入しようとしています。ListViewのデータを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; 

私はVb.netのListViewから複数の行を挿入できますか?

the documentationによると、あなたはDataTableDbDataReaderまたはIEnumerable<SqlDataRecord>としてTVPを渡すことができ

+0

いいえ、UDTTを使用してVB.net ListViewをtvpとして渡すことはできません。おそらくXMLとして。 VB.netのコードも投稿してください。 – Horaciux

+0

https://www.codeproject.com/Articles/1073184/How-to-import-data-into-MS-SQL-server-from-CSV-そしてXMLインポートの例があります。 (XML BULKINSERTではなく、その下にあります。) – NeedsAnswers

答えて

1

ありがとうございます。以下は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 
関連する問題