I have two table: Stampings and Registries.
Stampings is populate from a program that read a CSV file and do an insert into the table. Some field into the table are: name, surname, card-code and employee-freshman.
Registries contains name, surname, card-code and employee-freshman.
Now, I need a control that from Stampings select name, surname, card-code and employee-freshman and comparate with data present into Registries using card-code like unique field.
If value from Stampings and Registries not match I want to update the record in Registries with the new value using date like where cause. The update must do taking the last inserted record into Stampings.
This because a card can be from an user, but at any time it could be transferred to another person.
Can someone help me?
This is my schema:
Stampings
(
ID INT
Date DATE
Hour VARCHAR
Card-Code VARCHAR
Name VARCHAR
Surname VARCHAR
employee-freshman VARCHAR
);
Registries
(
ID INT,
Card-code VARCHAR
Name VARCHAR
Surname VARCHAR
employee-freshman VARCHAR
);
I used C# tag because here below I report the code I'm using.
Tell me if you think that logic is correct to approach.
using (SqlCommand selezionaCodiciTessera = new SqlCommand("SELECT Stampings.Card-code, Stampings.Surname, Stampings.Name, Stampings.employee-freshman FROM Stampings INNER JOIN Registries ON Stampings.Card-code = Registries.Card-code WHERE Stampings.Date = (SELECT MAX(Date) FROM Stampings WHERE Stampings.Card-code = Registries.Card-code) AND Stampings.Hour = (SELECT MAX(Hour) FROM Stampings WHERE Stampings.Card-code = Registries.Card-code) GROUP BY Stampings.Card-code, Stampings.Surname, Stampings.Name, Stampings.employee-freshman ORDER BY Stampings.Card-code;", connessione))
{
SqlDataReader reader = selezionaCodiciTessera.ExecuteReader();
while (reader.Read())
{
using (SqlConnection connessione2 = new SqlConnection(connString))
{
connessione2.Open();
string query = "";
if (reader[1].ToString().Contains("'"))
{
string modifica = reader[1].ToString().Replace("'", "''");
query = "UPDATE Registries SET Surname = '" + modifica + "', Name = '" + reader[2].ToString() + "', employee-freshman = '" + reader[3].ToString() + "' WHERE Card-code = '" + reader[0].ToString() + "';";
using (SqlCommand aggiornaOinsersci = new SqlCommand(query, connessione2))
{
aggiornaOinsersci.CommandTimeout = 180;
try
{
aggiornaOinsersci.ExecuteNonQuery();
}
catch (SqlException e)
{
LOG("Timeout nell'esecuzione della query. " + e.ToString());
}
}
}
}
}
}