In the line
SqlDataAdapter da = new SqlDataAdapter("select * from Question where Teacher_id=@tea_id ", con);
you have declared the variable @tea_id but you have not provided the parameter to the command
e.g.
cmd.Parameters.Add(new SqlParameter("tea_id", tea_id));
There is more wrong than just this so have a look here
for a tutorial[
^] on using parameterised queries
[EDIT] In response to OP comment...
Instead of
String tea_id = Convert.ToString(TextBox2.Text);
(by the way Convert.ToString was unnecessary TextBox2.Text is already a string) you probably want something like
long tea_id = long.Parse(this.textBox1.Text);
Because tea_id was declared as
string
the parameter will have surrounded it by single quotes when inserting the variable into the sql string