Comment utiliser SqlBulkCopyColumnMappingCollection?

.net c# columnmappings sqlbulkcopy

Question

Je souhaite créer une méthode SqlBulkCopy que je puisse utiliser pour toutes mes insertions en bloc en transmettant des données spécifiques via les paramètres.

Maintenant, j'ai besoin de cartographier certains d'entre eux. Je ne sais pas comment créer une SqlBulkCopyColumnMappingCollection car c'était mon plan pour transmettre et utiliser la collection de mappages. Cependant, je ne sais pas comment le faire. Je ne peux pas en faire un nouvel objet.

C'est ce que j'ai maintenant. Comment puis-je l'ajouter pour que le mappage le transmette?

public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize)
{
    // Get the DataTable 
    DataTable dtInsertRows = dataTable;

    using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
    {
        sbc.DestinationTableName = DestinationTbl;

        // Number of records to be processed in one go
        sbc.BatchSize = batchSize;

        // Finally write to server
        sbc.WriteToServer(dtInsertRows);
    }
}

Réponse acceptée

Vous n'avez pas besoin de créer une nouvelle instance de celle-ci - la classe SqlBulkCopy a une propriété qui est une collection de mappage que vous pouvez utiliser:

public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize)
{
    // Get the DataTable 
    DataTable dtInsertRows = dataTable;

    using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
    {
        sbc.DestinationTableName = DestinationTbl;

        // Number of records to be processed in one go
        sbc.BatchSize = batchSize;

        // Add your column mappings here
        sbc.ColumnMappings.Add("field1","field3");
        sbc.ColumnMappings.Add("foo","bar");

        // Finally write to server
        sbc.WriteToServer(dtInsertRows);
    }    
}

MODIFIER:

Sur la base des commentaires, l'objectif était de créer une fonction générique, en évitant par exemple de coder explicitement le mappage dans la fonction. Dans la mesure où ColumnMappingCollection ne peut pas être instancié, il est recommandé de transmettre une List<string> ou similaire contenant la définition de mappage de colonne dans la fonction. Par exemple:

var columnMapping = new List<string>();
columnMapping.Add("field1,field3");
columnMapping.Add("foo,bar");

Puis redéfinissez la fonction en tant que

public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize, List<string> columnMapping)
{
    // Get the DataTable 
    DataTable dtInsertRows = dataTable;

    using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
    {
        sbc.DestinationTableName = DestinationTbl;

        // Number of records to be processed in one go
        sbc.BatchSize = batchSize;

        // Add your column mappings here
        foreach(var mapping in columnMapping)
        {
            var split = mapping.Split(new[] { ',' });
            sbc.ColumnMappings.Add(split.First(), split.Last());
        }

        // Finally write to server
        sbc.WriteToServer(dtInsertRows);
    }
}


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi