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);
}
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
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.
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.
Utilisez ColumnMappings :
s.ColumnMappings.Add("Name", "Name");
s.ColumnMappings.Add("Address", "Address");
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