Сопоставление столбцов в таблице данных с таблицей SQL с помощью SqlBulkCopy

Я хотел бы знать, как я могу сопоставить столбцы в таблице базы данных с таблицей данных в С# перед добавлением данных в базу данных.

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

Ответы

Ответ 1

Вам, вероятно, понадобится нечто вроде

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

Ссылка: Как использовать SqlBulkCopyColumnMappingCollection? , .

Seel также http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy

Ответ 2

Это стало настолько распространенной задачей, что я написал для этого помощника:

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

Поскольку я сам создавал DataTable, я назвал его столбцы так же, как и таблицу SQL.

Ответ 3

Возможно, было бы полезно знать, что , если столбцы в исходном запросе (или таблице) и целевой таблице имеют одноименное имя и находятся в точный порядок, тогда не нужно явно выписывать сопоставления, потому что SqlBulkCopy создаст сопоставление по умолчанию с этим порядком по умолчанию.

Ответ 4

Используйте ColumnMappings:

s.ColumnMappings.Add("Name", "Name");
s.ColumnMappings.Add("Address", "Address");

Ответ 5

Метод Добавить в коллекцию ColumnMappings позволяет сопоставлять столбцы из исходной таблицы в таблицу адресатов. Метод ColumnMappings.Add принимает четыре разных способа сопоставления ваших столбцов.

SQLBulkCopy очень строг по типу данных обоих столбцов, которые вы должны учитывать при добавлении его в коллекцию ColumnMappings