Verwenden von SqlBulkCopy zum Einfügen in SQL

sqlbulkcopy sql-server vb.net

Frage

Ich weiß nicht, warum Daten nicht in SQL gelangen. Kann jemand bitte dieses überprüfen und sehen, was mit meinem Code falsch ist? Ich habe den Großteil des Codes unten von und MSDN-Seite: 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

Akzeptierte Antwort

In dem System, in dem ich eine BulkCopy ausführe, richte ich die Spaltenzuordnungen ein, wie in der Dokumentation Spaltenzuordnung - SQL-Massenkopie erläutert

Das Mapping wird mit den Namen der Quell- und Zielspalten eingerichtet. Dieses Beispiel stammt aus der Dokumentation:

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

Als ich das erste Mal eingerichtet habe, erinnere ich mich daran, Probleme zu haben, ohne die Spaltenzuordnungen in meiner Umgebung explizit einzurichten.


Beliebte Antwort

Wenn die Feldtypen, Feldreihenfolgen, Felder zählen Ihre Datenquelle, sind nicht die gleichen mit der Zieltabelle. Ihre Bulk-Kopie wird fehlschlagen.

Im obigen Fall sollten Sie die ColumnMappings für die einzelnen Felder in Ihren Daten für Ihr sqlbulkcopy-Objekt angeben.

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum