Вы выполняете один и тот же запрос два раза (rep_bind и button_click) и никогда не закрываете соединение с базой данных.Это создаст много путей к ошибочным условиям.Например, когда соединение обслуживает DataReader, вы не можете использовать его для других задач.И держу пари, что именно в этой точке ваша программа выдает первую ошибку.
Не следует оставлять соединение открытым в течение большего времени, чем необходимо для извлечения ваших данных.
И, конечно, как уже отмечалось в комментариях, вы должны использовать параметры для запроса к базе данных и никогда не объединять пользовательский ввод с вашими командами sql.
Итак, первое, что нужно изменить, это connection method
public SqlConnection connection()
{
string constr = ConfigurationManager.ConnectionStrings["locations"].ToString();
SqlConnection con = new SqlConnection(constr);
con.Open();
return con;
}
Теперь мы вернем соединение из этого метода.Зачем?Потому что мы можем использовать возвращенный объект в используя оператор , который предоставит нашему коду функциональность, необходимую для закрытия соединения при каждом его использовании.И в качестве еще одного бонуса нам больше не нужны две глобальные переменные.
В методе rep_bind мы могли бы написать
private bool rep_bind()
{
using(SqlConnection con = connection())
{
string query = "select * from locations where Name like @name";
SqlDataAdapter da = new SqlDataAdapter(query, con);
da.SelectCommand.Parameters.Add("@name", SqlDbType.NVarChar).Value = TextBox1.Text + "%";
DataSet ds = new DataSet();
da.Fill(ds);
bool hasRows = ds.Tables[0].Rows.Count > 0;
GridView1.DataSource = ds;
GridView1.DataBind();
return hasRows;
}
}
Теперь в конце блока использования соединение будетбыть закрытым и уничтоженным, и переменная, сообщающая нам, есть ли у нас строки или нет, возвращается вызывающему коду.
Обработчик события button_click заботится о координации всего бэкэнда и интерфейса пользовательского интерфейса
protected void Button1_Click(object sender, EventArgs e)
{
if(rep_bind())
{
GridView1.Visible = true;
TextBox1.Text = "";
Label1.Text = "";
}
else
{
GridView1.Visible = false;
Label1.Visible = true;
Label1.Text = "The search Term " + TextBox1.Text + " Is Not Available in the Records"; ;
}
}