DataReader mantiene la connessione finché non scorre tutti i suoi record. Prova questo
using(reader)
{
System.Data.DataTable dt = new System.Data.DataTable();
dt.Load(reader);
foreach(DataRow row in dt.Rows)
{
addtolog("mysql",row["nations_name"].ToString());
int nation_ID = int.Parse(row["nations_ID"].ToString());
string nation_name = row["nations_name"].ToString();
string user_ID = row["nations_user"].ToString();
addnation(nation_ID, nation_name, user_ID);
}
}
In questo modo i due lettori non condividono la stessa connessione