Elimina le righe da DataTable nella memoria corrispondente alle righe duplicate nel Database

.net datatable sqlbulkcopy sql-server vb.net

Domanda

Ho un dataTable che userò a BulkCopy su una tabella di destinazione. Sto cercando di risolvere la violazione della chiave primaria. Quindi, invece di utilizzare una tabella temporanea e quindi unire con la produzione, sto tentando di eliminare le righe ridondanti dal DataTable in memoria prima di passarlo al metodo WriteToServer.

Nel mio codice creo le colonne DataTable di memoria nello stesso formato esatto della tabella nel Database in termini di colonne e campi. Quindi non sto facendo alcuna mappatura delle colonne. Il mio record PK è un GUID con un vincolo di valore univoco e viene chiamato PKID. Riempio il DataTable da file CSV su disco quindi eseguo BulkCopy.

La mia idea è di provare a fare la seguente logica: Elimina da MemoryDataTable in cui si trova PKID (SELEZIONA PKID da SQLTable)

Ecco il mio codice:

            Try
            Using sqlBulk As New SqlBulkCopy(LocalDBConnectionString, SqlBulkCopyOptions.TableLock)
                sqlBulk.DestinationTableName = "DataRecords"
                sqlBulk.BatchSize = 5000
                sqlBulk.WriteToServer(MemoryDataTable)
                sqlBulk.Close()
            End Using
            Catch ex As Exception
            EventArgs.ErrorMessage = ex.Message
            ''''Catch Primary Key Violation Here''''
            End Try

Risposta popolare

Grazie che può essere una buona opzione. Tuttavia, ho realizzato ciò che stavo cercando di fare :) Nella sezione catch ho selezionato tutti i PK dalla tabella DB live in un DataReader. Quindi faccio un giro tra le righe restituite dal lettore. In ogni ciclo, utilizzo il metodo MemoryDataTable.rows.find per verificare se la riga DataReader esiste nella MemoryDataTable, se sì, la cancello.



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