Соединение не было закрыто. Текущее состояние соединения открыто -- c# поле с участием connection пол Связанный проблема

Connection was not closed. Connection's current state is open


0
vote

проблема

русский

Это дает сообщение об ошибках не было закрыто. Текущее состояние соединения открыто. Пожалуйста, помогите с кодом.

 <код>   private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)     {         SqlConnection con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=C:UsersvickyDesktopGym management systemFitness_clubvicky.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");         try         {             con.Open();              SqlCommand cmd = new SqlCommand("Select * FROM [plan] where plantype='" + comboBox1.Text + "'", con);              SqlDataReader dr = cmd.ExecuteReader();              while (dr.Read())             {                 string amount = dr.GetString(1);                 textBox5.Text = amount;              }             con.Close();         }          catch(Exception ex)         {             MessageBox.Show(ex.Message);         }  }   
Английский оригинал

It gives the error connection was not closed. Connection's current state is open. Please help out with the code.

  private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)     {         SqlConnection con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=C:UsersvickyDesktopGym management systemFitness_clubvicky.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");         try         {             con.Open();              SqlCommand cmd = new SqlCommand("Select * FROM [plan] where plantype='" + comboBox1.Text + "'", con);              SqlDataReader dr = cmd.ExecuteReader();              while (dr.Read())             {                 string amount = dr.GetString(1);                 textBox5.Text = amount;              }             con.Close();         }          catch(Exception ex)         {             MessageBox.Show(ex.Message);         }  } 
</div
     
         
         

Список ответов

0
 
vote
vote
Лучший ответ
 

Вы должны использовать <код> using блоков, чтобы помочь с управлением объектами.

 <код>     private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)     {         string connStr = @"Data Source=.SQLEXPRESS;AttachDbFilename=C:UsersvickyDesktopGym management systemFitness_clubvicky.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";         string cmdText = "Select * FROM [plan] where plantype=@planType";          using (SqlConnection con = new SqlConnection(connStr))         using (SqlCommand cmd = con.CreateCommand())         {             con.Open();             cmd.CommandText = cmdText;             cmd.Parameters.AddWithValue("@planType", comboBox1.Text);              var reader = cmd.ExecuteReader(CommandBehavior.SingleRow);              if (reader.Read())             {                 string amount = reader.GetString(1);                 textbox5.Text = amount;             }         }     }   

также обратите внимание на использование параметризованных запросов, чтобы избежать атак для инъекций SQL. Поскольку вы, вероятно, ожидаем, что только одно значение будет возвращено, вы должны указать имя столбца в запросе и использовать <код> ExecuteScalar вместо читателя и while Loop. Другая альтернатива - использовать <код> CommandBehavior.SingleRow в качестве параметра в команду, которая сообщает команду просто вернуть один результат строки.

У вас также есть проблема с перекрестной резьбой здесь, и вы можете решить ее, используя некоторые вызовов.

 <код> string amount = string.Empty; if (reader.Read()) {     amount = reader.GetString(1); } if (this.InvokeRequired)     this.Invoke((MethodInvoker) delegate { textbox5.Text = amount; }); else     textbox5.Text = amount;   

Другое, что следует отметить, это дать вашему контролю значимые имена. Его LOT проще отлаживать или понять контроль с именем <код> cbx_PlanType , чем <код> combobox1 или <код> tbx_PlanAmount , а не <код> textbox5 .

 

You should be using using blocks to help with managing your objects.

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)     {         string connStr = @"Data Source=.SQLEXPRESS;AttachDbFilename=C:UsersvickyDesktopGym management systemFitness_clubvicky.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";         string cmdText = "Select * FROM [plan] where plantype=@planType";          using (SqlConnection con = new SqlConnection(connStr))         using (SqlCommand cmd = con.CreateCommand())         {             con.Open();             cmd.CommandText = cmdText;             cmd.Parameters.AddWithValue("@planType", comboBox1.Text);              var reader = cmd.ExecuteReader(CommandBehavior.SingleRow);              if (reader.Read())             {                 string amount = reader.GetString(1);                 textbox5.Text = amount;             }         }     } 

Also note the use of parameterized queries to avoid SQL injection attacks. Since you are probably only expecting one value to be returned, you should specify the name of the column in the query and use ExecuteScalar instead of the reader and the while loop. The other alternative is to use CommandBehavior.SingleRow as the parameter to the command, which tells the command to just return a single row result.

You also have a cross-threading problem here, and you can solve it by using some invoking.

string amount = string.Empty; if (reader.Read()) {     amount = reader.GetString(1); } if (this.InvokeRequired)     this.Invoke((MethodInvoker) delegate { textbox5.Text = amount; }); else     textbox5.Text = amount; 

Another thing to note, is to give your controls meaningful names. Its a lot easier to debug or understand a control named cbx_PlanType than combobox1, or tbx_PlanAmount rather than textbox5.

</div
 
 
     
     
0
 
vote
 <код>     private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)     {         string connStr = @"Data Source=.SQLEXPRESS;AttachDbFilename=C:UsersvickyDesktopGym management systemFitness_clubvicky.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";         string cmdText = "Select * FROM [plan] where plantype=@planType";          using (SqlConnection con = new SqlConnection(connStr))         using (SqlCommand cmd = con.CreateCommand())         {             con.Open();             cmd.CommandText = cmdText;             cmd.Parameters.AddWithValue("@planType", comboBox1.Text);              var reader = cmd.ExecuteReader(CommandBehavior.SingleRow);              if (reader.Read())             {                 string amount = reader.GetString(1);                 textbox5.Text = amount;             }         }     } 0  
 
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {     SqlConnection con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=C:UsersvickyDesktopGym management systemFitness_clubvicky.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");     try     {         con.Open();          SqlCommand cmd = new SqlCommand("Select * FROM [plan] where plantype='" + comboBox1.Text + "'", con);          SqlDataReader dr = cmd.ExecuteReader();          while (dr.Read())         {             string amount = dr.GetString(1);             textBox5.Text = amount;          }         // check if connection is open         if (con.State == 1)             con.Close();     }     catch(Exception ex)     {         MessageBox.Show(ex.Message);     }     finally     {         // check if connection is open         if (con.State == 1)             con.Close();     } } 
</div
 
 

Связанный проблема

1  Узор сопоставления Regex внутри шаблона упаковки  ( Regex match pattern inside a wrapping pattern ) 
Я хочу сопоставить все номера телефонов, которые обернуты между & lt; и & gt; & gt; Теги. Это регулярное выражение для телефонов: <код> 0[2349]{1}-[1-9]{1}...

1  Есть ли способ генерировать GUID из списка руководств?  ( Is there a way to generate a guid from a list of guids ) 
У меня есть список объектов, которые они имеют GUID для IDS. Я хочу использовать идентификаторы в этом списке объектов для создания GUID, который я могу испол...

3  C # PropertiveGrid Drag Drop  ( C sharp propertygrid drag drop ) 
Я пытаюсь реализовать поддержку перетаскивания / падения на свойств в C # с использованием VS2005 (.NET 2.0). Собственность могут обрабатывать драгерацию и т....

0  Сообщение об ошибке Wile пытается открыть файл .xls  ( Error message wile trying to open xls file ) 
Я создаю файл Excel на лету для отправки его вложение в электронном письме. Соответствующий фрагмент кода приведен ниже (это консольное приложение) <код> pu...

0  C # Обработка исключений на класс  ( C sharp class wide exception handling ) 
Можно ли удалить исключения в одном месте в файле класса C #? Я кодирую некоторые модульные тесты в NUNIT для проверки веб-службы WCF, и на всех методах / т...

2  Несколько клиентских проектов на один серверный проект W / Silverlight & Ria Services Beta  ( Multiple client projects to one server project w silverlight ria services bet ) 
Тип или имя пространства имен «Ресурсы» не существует в «MyWebProject.Web» (Вы пропустите сборку Ссылка?) C: users ... mysecondproject generated_...

0  Анимация спрайты в XNE после мыши  ( Sprite animation in xna following the mouse ) 
Моя старая проблема заключалась в том, что мой код изначально следит за мышью, но когда она достигла мыши, она исчезла, и в конечном итоге исчезла. Моя теку...

0  Wpf keypreview windows ключ и второй ключ  ( Wpf keypreview windows key and second key ) 
Я реализую приложение WPF в C # 4.5 для Windows 7, и я хотел бы иметь возможность схватить событие, когда пользователь нажимает клавишу Windows и C. Я реали...

5  Использование Litjson в Unity3D  ( Using litjson in unity3d ) 
2 вопроса. 1) Можно ли использовать библиотеку Litjson AS так же, как и сценарии в JavaScript? Это действительно общий вопрос о том, чтобы иметь возможность...

-1  Право оправдании десятичного массива в C #?  ( Right justifying decimal array in c ) 
У меня есть проект для моего класса программирования C #; Написание программы, которая может прочитать файл работника и файл продаж и обрабатывать два. Я зако...

0  1002 Ошибка API Вызов PayPal Sandbox  ( 1002 error api call paypal sandbox ) 
Я создал учетную запись PayPal Sandbox, и создал пользователь, и у меня есть все учетные данные, осмотр этого правильных учетных данных, которые он несколько ...

4  Трудно запустить параллельные вставки на SQLite базу данных в C #  ( Difficulty running concurrent inserts on sqlite database in c sharp ) 
Я запускаю ряд потоков, которые каждая попытка выполнить вставки в одну базу данных SQLite. Каждый поток создает собственную связь с БД. Каждый из них создает...

0  Тест подразделения для класса банка в C #  ( Unit test for bank class in c sharp ) 
Я учусь создавать модульные тесты для проекта, написанного в C #. Я был следовать примеру на веб-сайте MSDN, и теперь я только что застрял на том, как создать...

1  Получение релевантности упорядоченный результат из текстового запроса на коллекции MongoDB с использованием драйвера C #  ( Retrieve relevance ordered result from text query on mongodb collection using th ) 
Я пытаюсь отправить текстовые запросы коллекции и получить результаты в текстовом порядке. документы объяснить довольно хорошо, как это сделать в оболочке: ...

0  Запустить функцию JavaScript с использованием C #  ( Trigger javascript function using c sharp ) 
Я должен написать класс C #, который получает содержимое HTML-страницы (страница публичная) и запускает функцию JavaScript, которая загружает файл. Моя цель...