I’ve noticed too many occasions when a fellow programmer comes up to me with this question:
“I’ve deleted a row and suddenly, another row got deleted! I checked my code and I don’t delete it anywhere… Must be some bug somewhere…”
So the answer in 99.9% of the cases is that you didn’t pay attention to the Rules in the foreign key constraints when you created your typed DataSet. Why? Because the defaults for UpdateRule and DeleteRule are Cascade (AcceptRejectRule defaults to None). This means that if you didn’t pay attention and you have a row that’s related to your row by foreign key, when you delete your row, that row will be marked as deleted.
My advice? Never have Rules set to Default. Microsoft could decide that what they’re doing today is wrong, change the defaults and you’re screwed.