Tout d'abord, je dois obtenir toutes les données d'ODBC (cela fonctionne déjà).
Vient ensuite la partie la plus compliquée dont je ne sais pas encore comment cela peut être fait. Il y a deux tables de données dans ODBC. Je les fusionne avec mon code actuel et les filtre avec certains paramètres.
Tableau 1 dans la base de données:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
123 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
Tableau 2 dans la base de données:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
463 BMW E64 SE0 JR KE OT PG OL J8 9 1
La table de données fusionnée ressemble à ceci:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
463 BMW E64 SE0 JR KE OT PG OL J8 9 1
123 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
Cependant, la table de données de sortie fusionnée devrait ressembler à ceci (pour avoir la possibilité de travailler avec elle plus loin):
NRO NRO1 NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
123 423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 463 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
Trouvez des doublons dans NAME
. Ne laissez qu'un seul d'entre eux, attribuez un numéro du tableau 1 au NRO
tableau 2 à NRO1
. Les chiffres du tableau 1 doivent être en NRO
, les chiffres du tableau 2 doivent être en NRO1
.
Après la connexion à ODBC, je remplis un tableau avec les données du tableau 1
DataTable dataTable = new DataTable("COMPANY");
using (OdbcConnection dbConnectionSE = new OdbcConnection(connectionStringSE))
{
dbConnectionSE.Open();
OdbcDataAdapter dadapterSE = new OdbcDataAdapter();
dadapterSE.SelectCommand = new OdbcCommand(queryStringSE, dbConnectionSE);
dadapterSE.Fill(dataTable);
}
puis j'obtiens des données d'un autre tableau 2 et les fusionne en:
using (OdbcConnection dbConnectionFI = new OdbcConnection(connectionStringFI))
{
dbConnectionFI.Open();
OdbcDataAdapter dadapterFI = new OdbcDataAdapter();
dadapterFI.SelectCommand = new OdbcCommand(queryStringFI, dbConnectionFI);
var newTable = new DataTable("COMPANY");
dadapterFI.Fill(newTable);
dataTable.Merge(newTable);
}
Après cela, j'effectue le filtrage (je dois avoir des lignes commençant uniquement par 4 et 1 NRO
, il y a aussi des lignes avec un autre numéro de départ):
DataTable results = dataTable.Select("ACTIVE = '1' AND (NRO Like '1%' OR NRO Like '4%')").CopyToDataTable();
Ensuite, j'ajoute une autre colonne pour NRO1
(cela ajoute également des zéros (0), je n'en ai pas besoin dans la colonne NRO1
):
results.Columns.Add("NRO1", typeof(int)).SetOrdinal(1);
foreach (DataRow row in results.Rows)
{
//need to set value to NewColumn column
row["NRO1"] = 0; // or set it to some other value
}
Je peux attraper des doublons avec ce code
var duplicates = results.AsEnumerable().GroupBy(r => r[2]).Where(gr => gr.Count() > 1);
mais comment faire le reste? Cela devrait être effectué par une boucle avec la construction d'une nouvelle table? Comment puis-je joindre et supprimer des doublons dataTable
?
NAME
. Si plus de deux - erreur (gestionnaire d'erreurs). 2. Il y avait une erreur dans mon exemple, je l'ai corrigée maintenant. Merci d'avoir mentionné celui-ci, il est important.
dataTable
contenir plus de deux doublons pour un nom? Par exemple, est-il possible d'exister trois doublons pour BMW? 2. Comment pouvons-nous définir lequel des enregistrements en double à conserver et lequel supprimer? Par exemple, nous pouvons conserver un enregistrement avec un minimumNRO
et supprimer l'autre enregistrement.