2017-12-30 32 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에서 여러 행을 삽입 할 수 있습니까?

감사

+0

아니요, VB.net ListView를 UDTT를 사용하여 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

the documentation에 따르면, 당신은 DataTable, DbDataReader 또는 IEnumerable<SqlDataRecord> A와 같은 TVP를 전달할 수 있습니다. 아래는 각 목록보기 항목에 대한 행과 각 하위 항목에 대한 열을 추가하는 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 
관련 문제