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は合法ですか? はい、理由を学ぶ