2013-02-27 2 views
2

В этом проблема. Я пытаюсь выполнить запрос и его бросание и исключение в connection.Open. Как ни странно, в том же приложении я выполняю запрос «Выбрать», и он отлично работает. Но когда я выполняю запрос «Обновить», он выдает это Невозможно подключиться к любой из указанных ошибок хостов MySQL. Это застряло навсегда. Может кто-то определить, где я ошибаюсь.Невозможно подключиться к любому из указанных хостов MySQL

private void button1_Click(object sender, EventArgs e) 
    { 
     if (radioButton1.Checked) 
     { 
      timerEnabled = 1; 
     } 

     connection.Open(); 

     //update the settings to the database table 
     MySqlCommand command = connection.CreateCommand(); 
     command.CommandText = "update Admin_Settings set Difficulty='" + comboBox3.Text + "'," + "NoOfQuestions='" + comboBox4.Text + "'," + "NoOfChoices='" + comboBox5.Text + "'," + 
      "Subject='" + comboBox8.Text + "'," + "Timer='" + comboBox2.Text + "," + "TimerEnabled=" + timerEnabled + "," + "TimerType='" + comboBox1.Text + "'"; 


     command.ExecuteNonQuery(); 

     MessageBox.Show("Settings updated"); 
    } 
+0

Ваш вопрос нуждается в дополнительной информации. Является ли соединение уже открытым, когда вы «connection.Open();' выполняет? Похоже на возможную причину. – evanmcdonnal

ответ

1

Я буду рекомендовать вам следующее:

private void button1_Click(object sender, EventArgs e) 
     { 
      using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connString)) 
      { 
       if (radioButton1.Checked) 
       { 
        timerEnabled = 1; 
       } 

       connection.Open(); 

       //update the settings to the database table 
       MySqlCommand command = connection.CreateCommand(); 
       command.CommandText = "update Admin_Settings set Difficulty='" + comboBox3.Text + "'," + "NoOfQuestions='" + comboBox4.Text + "'," + "NoOfChoices='" + comboBox5.Text + "'," + 
        "Subject='" + comboBox8.Text + "'," + "Timer='" + comboBox2.Text + "," + "TimerEnabled=" + timerEnabled + "," + "TimerType='" + comboBox1.Text + "'"; 


       command.ExecuteNonQuery(); 

       MessageBox.Show("Settings updated"); 
      } 
     } 

Я понимаю, что вы думаете про себя, что вы должны поддерживать соединение для простоты использования и бла-бла, но в мой опыт, это потраченное впустую усилие. Что в конечном итоге происходит из-за множества неприятностей, которые вам не нужны или не нужны. В конечном итоге вы не понимаете, что у вас есть соединение, открытое где-то в другом месте, и вы тратите часы на устранение неполадок, которые вам не нужны. Откройте свое соединение, закройте его, когда закончите.

Если вы хотите иметь один объект соединения, это нормально, но используйте шаблон использования, чтобы он каждый раз удалялся и всегда начинал новый с ваших подключений.

ПРИМЕЧАНИЕ: замените мое соединение на объект yoku MySqlConnection!

+0

Спасибо за совет и вашу помощь. Мне удалось это исправить. Строка подключения, я забыл поставить точку с запятой. Глупая ошибка. ahh – user123

+0

, но палец вверх для рекомендации – user123

+0

np, я рад, что вы смогли решить проблему. –

0

Как сказал Майк, вам всегда лучше использовать блок «using», поскольку он имеет любое соединение, когда оно выходит из использования блока. Я использовал два блока ниже одного для подключения, а другой - для объекта команды.

Попробуйте

private void button1_Click(object sender, EventArgs e) 
    { 
     using (SqlConnection connection = new SqlConnection(connString)) 
     { 
      if (radioButton1.Checked) 
      { 
       timerEnabled = 1; 
      } 

      string queryString = "update Admin_Settings set Difficulty='" +  
      comboBox3.Text + "'," + "NoOfQuestions='" + comboBox4.Text + "'," + 
      "NoOfChoices='" + comboBox5.Text + "'," + "Subject='" + comboBox8.Text + 
      "'," + "Timer='" + comboBox2.Text + "," + "TimerEnabled=" + timerEnabled + 
       "," + "TimerType='" + comboBox1.Text + "'"; 

      using (SqlCommand command = new SqlCommand(queryString, connection)) 
      { 
      //update the settings to the database table 


      command.Connection.Open(); 
      command.ExecuteNonQuery(); 
      command.Connection.Close(); 

      MessageBox.Show("Settings updated"); 
      } 
     } 
    } 
+0

Это правда, но проблема на самом деле не здесь, это где-то еще, что он делает связь. – evanmcdonnal

+0

@evanmcdonnal: Я изменил код выше. Нам нужно явно открыть соединение до того, как мы выполним executeonquery. Если это также не работает, он должен придумать подробные сведения об ошибке – Learner

+0

Спасибо за совет и вашу помощь. Мне удалось это исправить. Строка подключения, я забыл поставить точку с запятой. Глупая ошибка. ahh – user123

Смежные вопросы