In addition to what ppolymoprphe has said - which is really important, and you need to do something about it through your whole app as a matter of urgency - your SQL is poor, and that doesn't help performance.
Why this:
com1.CommandText = "SELECT schoolname FROM sch_school1 where schoolnumd='" + TBSchoolNum.Text + "'";
string schoolname = com1.CommandText;
con1.Open();
OleDbDataReader r1 = com1.ExecuteReader();
int y = 0;
while (r1.Read())
{ y += 1; }
con1.Close();
When you can do that without returning any rows, or creating a DataReader?
com1.CommandText = "SELECT COUNT(schoolname) FROM sch_school1 where schoolnumd=@SN";
com1.Parameters.AddWithValue("@SN", TBSchoolNum.Text);
con1.Open();
int y = com1.ExecuteScalar():
con1.Close();
In fact, you don't even need to do that: you can just issue the UPDATE command, and check the return value (which is the number of rows affected) for zero. If no rows were updated, you need to do the INSERT.