bulkcopy con chiave primaria non funzionante

c# datatable sql sqlbulkcopy

Domanda

Ho una tabella di database, con colonne e una chiave priamaria.

Voglio fare il bulkcopy, da un datatable nel mio c #.

Quando ho la chiave primaria nella mia tabella, ho ottenuto un'eccezione perché la tabella ha 6 colonne, mentre la mia datatable ne ha solo 5.

cosa dovrei fare per favore?

Dovrei aggiungere la chiave primaria al mio datatable nel mio c #?

(se hai bisogno di un codice dimmi un pacco)

questo è il datatable

private DataTable getBasicDataTable()
        {
            DataTable dataTable = new DataTable();
            dataTable.Clear();
            dataTable.Columns.Add("customerID", typeof(int));
            dataTable.Columns.Add("firstName", typeof(string));
            dataTable.Columns.Add("lastName", typeof(string));
            dataTable.Columns.Add("showsNumber", typeof(int));
            dataTable.Columns.Add("visitNumber", typeof(int));
            dataTable.Columns.Add("cancellation", typeof(int));
            return dataTable;
        }

ma nella mia tabella di database, ho le stesse colonne identiche, ma con la chiave primaria ID aggiuntiva,

Nota

quando cancello la mia chiave primaria nel database, tutto funziona perfettamente

Risposta accettata

Ho trovato la soluzione da solo

bc.ColumnMappings.Add("customerID", "customerID");
                sbc.ColumnMappings.Add("firstName", "firstName");
                sbc.ColumnMappings.Add("lastName", "lastName");
                sbc.ColumnMappings.Add("showsNumber", "showsNumber");
                sbc.ColumnMappings.Add("visitNumber", "visitNumber");
                sbc.ColumnMappings.Add("cancellation", "cancellation");

Risposta popolare

Usa SqlBulkCopy.ColumnMappings :

I mapping di colonne definiscono le relazioni tra le colonne nell'origine dati e le colonne nella destinazione.

...

Se l'origine dati e la tabella di destinazione hanno lo stesso numero di colonne e la posizione ordinale di ciascuna colonna di origine all'interno dell'origine dati corrisponde alla posizione ordinale della colonna di destinazione corrispondente, la raccolta ColumnMappings non è necessaria. Tuttavia, se i conteggi delle colonne sono diversi o le posizioni ordinali non sono coerenti, è necessario utilizzare ColumnMappings per assicurarsi che i dati vengano copiati nelle colonne corrette.

Vedi l'esempio su SqlBulkCopyColumnMapping per come usarlo.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow