1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
DT = dtas.Clone();
for (int i = 0; i < dtas.Rows.Count; i++)
{ //on parcourt les lignes de l'AS400
check = false;
for (int j = 0; j < dtsql.Rows.Count || dtsql.Rows.Count > 0 || !check; j++) //on parcourt les lignes de SQL Server
{
if ((string)dtas.Rows[i][dtas.Columns["ORDNO"].Ordinal] == (string)dtsql.Rows[j][dtsql.Columns["SNOF"].Ordinal] &&
(string)dtas.Rows[i][dtas.Columns["OPSEQ"].Ordinal] == (string)dtsql.Rows[j][dtsql.Columns["SOPE"].Ordinal]) //si le couple clé primaire est identique
{
if ((string)dtas.Rows[i][dtas.Columns["OPSTC"].Ordinal] != (string)dtsql.Rows[j][dtsql.Columns["SITUATION"].Ordinal] &&
Convert.ToInt32((string)dtas.Rows[i][dtas.Columns["OPSTC"].Ordinal]) == 0) //si la situation est différente et OPSTC = "00"
{
DT.Rows.Add(dtas.Rows[i].ItemArray); //on ajoute la ligne au datatable temporaire
dtsql.Rows.Remove(dtsql.Rows[j]); //et on supprime la ligne
check = true;
}
if ((string)dtas.Rows[i][dtas.Columns["WKCTR"].Ordinal] != (string)dtsql.Rows[j][dtsql.Columns["SPDC"].Ordinal]) //si les postes sont identiques
{
DT.Rows.Add(dtas.Rows[i].ItemArray); //on ajoute la ligne au datatable temporaire
DT.Rows[DT.Rows.Count - 1][DT.Columns["OPSTC"].Ordinal] = (string)dtsql.Rows[j][dtsql.Columns["SITUATION"].Ordinal]; //on rajoute la situation de SQL Server
dtsql.Rows.Remove(dtsql.Rows[j]); //et on supprime la ligne
check = true;
}
if (!check)
{
dtsql.Rows.Remove(dtsql.Rows[j]);
check = true;
}
}
else //si le couple clé primaire est différent
{
if (Convert.ToInt32(((string)dtas.Rows[i][dtas.Columns["ORDNO"].Ordinal]).TrimStart('M')) > Convert.ToInt32(((string)(dtsql.Rows[j][dtsql.Columns["SNOF"].Ordinal])).TrimStart('M')) ||
Convert.ToInt32(((string)dtas.Rows[i][dtas.Columns["ORDNO"].Ordinal]).TrimStart('M')) == Convert.ToInt32(((string)(dtsql.Rows[j][dtsql.Columns["SNOF"].Ordinal])).TrimStart('M')) &&
Convert.ToInt32(((string)dtas.Rows[i][dtas.Columns["OPSEQ"].Ordinal]).TrimStart('M')) > Convert.ToInt32(((string)(dtsql.Rows[j][dtsql.Columns["SOPE"].Ordinal])).TrimStart('M')))
{ //si (ORDNO > SNOF) ou (ORDNO = SNOF et OPSEQ > SOPE)
dtsql.Rows.Remove(dtsql.Rows[j]); //on supprime la ligne et on passe à la suivante
check = true;
}
}
}
if (!check) //si non trouvée, on ajoute la ligne au datatable temporaire
{
DT.Rows.Add(dtas.Rows[i].ItemArray);
}
} |
Partager