web-dev-qa-db-fra.com

Mappage de colonnes dans un DataTable à une table SQL avec SqlBulkCopy

Je voudrais savoir comment mapper des colonnes d'une table de base de données à la table de données en c # avant d'ajouter les données à la base de données.

using (SqlBulkCopy s = new SqlBulkCopy(conn))
{
    s.DestinationTableName = destination;
    s.WriteToServer(Ads_api_ReportData);
}
22
user2545743

Vous avez probablement besoin de quelque chose comme

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

Réf: Comment utiliser SqlBulkCopyColumnMappingCollection? . .

Seel également http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy

39
StackTrace

Cela est devenu une tâche si courante que j'ai écrit cet assistant pour cela:

public static void AutoMapColumns(SqlBulkCopy sbc, DataTable dt)
{
    foreach (DataColumn column in dt.Columns)
    {
        sbc.ColumnMappings.Add(column.ColumnName, column.ColumnName);
    }
}

Comme je créais moi-même le DataTable, j'ai nommé ses colonnes de la même manière que la table SQL.

13
Evan M

Il peut être utile de savoir que si les colonnes dans la requête source (ou la table) et la table cible ont même nom et sont dans exactement la même order, alors il y a pas besoin d'écrire explicitement les mappages, car SqlBulkCopy créera un mappage par défaut avec cet ordre par défaut.

6
Hugo Nava Kopp

Utilisez ColumnMappings :

s.ColumnMappings.Add("Name", "Name");
s.ColumnMappings.Add("Address", "Address");
0
Ben Gulapa

La méthode Add on ColumnMappings collection vous permet de mapper vos colonnes de la table source à la table de destination. La méthode ColumnMappings.Add accepte quatre façons différentes de mapper vos colonnes.

SQLBulkCopy est très strict sur le type de données des deux colonnes que vous devez prendre en compte lors de l'ajout à la collection ColumnMappings

0
Laxmikant