SQL에 삽입하기 위해 SqlBulkCopy 사용하기

sqlbulkcopy sql-server vb.net

문제

데이터가 SQL에 들어 가지 않는 이유를 모르겠습니다. 누군가 이것을 검토하고 내 코드가 잘못된 것을 볼 수 있습니까? 나는 아래의 대부분의 코드와 MSDN 페이지를 가지고있다 : http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy(v=vs.110).aspx

Dim connectionString As String = "Server= "<servername>"; integrated security=true"

    Using sourceConnection As SqlConnection = _

        New SqlConnection(connectionString)
        sourceConnection.Open()

        Dim commandSourceData As SqlCommand = New SqlCommand(<TSQL>), sourceConnection)
        Dim reader As SqlDataReader = commandSourceData.ExecuteReader

        Using destinationConnection As SqlConnection = _
            New SqlConnection(connectionString)
            destinationConnection.Open()

            Using bulkcopy As SqlBulkCopy = _
                New SqlBulkCopy(destinationConnection)
                bulkcopy.DestinationTableName = _
                    "<tableName>"

                Try
                    bulkcopy.WriteToServer(reader)
                Catch ex As Exception
                    Console.WriteLine(ex.Message)
                Finally
                    reader.Close()
                End Try

            End Using
        End Using
        sourceConnection.Close()
    End Using

수락 된 답변

BulkCopy를 수행하는 시스템에서 열 매핑 - SQL 대량 복사 설명서의 설명에 따라 열 매핑을 설정합니다.

매핑은 소스 및 대상 열 이름으로 설정됩니다. 이 예제는 문서에 있습니다.

 Dim mapID As New _
              SqlBulkCopyColumnMapping("ProductID", "ProdID")
            bulkCopy.ColumnMappings.Add(mapID)

처음 설정을 할 때 환경에서 열 매핑을 명시 적으로 설정하지 않고도 문제가 있음을 기억합니다.


인기 답변

field-types, field-orders, 데이터 소스의 필드 수는 대상 테이블과 동일하지 않습니다. 일괄 복사가 실패하면 반환됩니다.

위의 경우 데이터 소스의 각 필드에 대한 ColumnMappings을 sqlbulkcopy 개체로 지정해야합니다.

            SqlBulkCopy copy = new SqlBulkCopy(MySqlConn);
            copy.BulkCopyTimeout = 6000;
            copy.DestinationTableName = TableName;
            for (int i = 0; i < this.lstBulkFields.Count; i++) {
                // if the source fields name are the same with the targets.
                copy.ColumnMappings.Add(this.lstBulkFields[i], this.lstBulkFields[i]);
            }
            copy.BatchSize = BatchSize;
            copy.WriteToServer(MyDataSource);


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.