2014-09-16 2 views
-2

У меня есть база данных MySQL на веб-сервере, которая содержит столбцы idPlayers, имя, фамилия, возраст и высота. Пользователь вводит данные в текстовые поля формы и нажимает кнопку, чтобы вставить данные в базу данных, у которой уже есть несколько строк данных. Ниже мой код:Вставка данных в базу данных MySQL C#

Метод в Connection.cs Класс:

public string AddPlayer(int idPlayers, string FirstName, string Surname, int Age, int Height) 
    { 
     string result; 
     using (var Connection = new MySqlConnection(ConnectionString)) 
     { 

      Connection.Open(); 

       using (var command = new MySqlCommand(
        "INSERT INTO Players(idPlayers, First Name, Surname, Age, Height) VALUES(@idPlayers, @First Name, @Surname, @Age, @Height)", Connection)) 
        try 
        { 
         command.Parameters.AddWithValue("idPlayers", idPlayers); 
         command.Parameters.AddWithValue("First Name", FirstName); 
         command.Parameters.AddWithValue("Surname", Surname); 
         command.Parameters.AddWithValue("Age", Age); 
         command.Parameters.AddWithValue("Height", Height); 
         command.ExecuteNonQuery(); 
         Connection.Close(); 
        } 
        catch 
        { 
         result = "Failure"; 
         return result; 
        }      
      } 
     result = "Success"; 
     return result; 
     }  
    } 

Метод вызова в Form1.cs класса

public void button1_Click(object sender, EventArgs e) 
    { 
     string result1; 
     int idPlayers = 3; 
     String FirstName = FirstNameBox.Text; 
     String Surname = SurnameBox.Text; 
     int Age = Convert.ToInt32(AgeBox.Text); 
     int Height = Convert.ToInt32(HeightBox.Text); 

     Connection NewCon = new Connection(); 
     result1 = NewCon.AddPlayer(idPlayers, FirstName, Surname, Age, Height); 
     MessageBox.Show(result1); 

    } 

При нажатии на кнопку, чтобы вставить данные в окне сообщения отображается Провал. У вас есть идеи, почему данные не будут вставляться? ConnectionString определенно корректен, поскольку я могу читать из базы данных в другом месте моей программы.

Спасибо за вашу помощь, Джордж

Измененный класс Connection.cs:

public string AddPlayer(int idPlayers, string FirstName, string Surname, int Age, int Height) 
    { 
     string result; 
     using (var Connection = new MySqlConnection(ConnectionString)) 
     { 

      Connection.Open(); 

       using (var command = new MySqlCommand(
        "INSERT INTO Players(idPlayers, First Name, Surname, Age, Height) VALUES(@idPlayers, @FirstName, @Surname, @Age, @Height)", Connection)) 
        try 
        { 
         command.Parameters.AddWithValue("@idPlayers", idPlayers); 
         command.Parameters.AddWithValue("@FirstName", FirstName); 
         command.Parameters.AddWithValue("@Surname", Surname); 
         command.Parameters.AddWithValue("@Age", Age); 
         command.Parameters.AddWithValue("@Height", Height); 
         command.ExecuteNonQuery(); 
         Connection.Close(); 
        } 
        catch(Exception ex) 
        { 
         result = ex.Message; 
         return result; 
        }      
      } 
     result = "Success"; 
     return result; 
     }  
    } 
+2

Почему вы игнорируете исключение в своем блоке 'catch'? Я гарантирую, что исключение говорит вам точно, что случилось. Игнорирование ошибок не поможет вам исправить ситуацию. – David

+0

@David верен, вместо отказа, отслеживает сообщение об ошибке и публикует это здесь. Это будет намного более полезно. –

ответ

1

Первая проблема, имена параметров (ну, идентификатор в целом) не может иметь места в запросе :

"... VALUES(@idPlayers, @First Name, @Surname, @Age, @Height)" 

двигатель запрос не имеет возможности интерпретировать @First Name. Сделать это одно слово:

"... VALUES(@idPlayers, @FirstName, @Surname, @Age, @Height)" 

Edit: Связанные с этим, вы также используете пробел в другой идентификатор:

"INSERT INTO Players(idPlayers, First Name, Surname, Age, Height) ..." 

Такая же проблема, вы не можете использовать пробелы, как это , I высоко не рекомендуется использовать пробелы в именах столбцов/таблиц. Но если вы должны, тогда вам нужно будет приложить их идентификаторы, чтобы ссылаться на них в запросах. Если я правильно помню, MySQL использует обратные тиков для этого:

"INSERT INTO Players(idPlayers, `First Name`, Surname, Age, Height) ..." 

Вторая проблема, вы не правильно добавлять параметры:

command.Parameters.AddWithValue("idPlayers", idPlayers); 

Вы не имеют параметр, называемый idPlayers , у вас есть один под названием @idPlayers. Есть разница. Попробуйте это:

command.Parameters.AddWithValue("@idPlayers", idPlayers); 

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

catch (Exception ex) 
{ 
    // "ex" contains the error information you're looking for 
    // log it, show it to the user, do something with it 
} 
+0

@GeorgeSillett: Похоже, у вас было два экземпляра первой проблемы, я обновил свой ответ, чтобы указать на другой. – David

+0

Использование back-ticks с пробелом не сработало, но я удалил пространство из имени столбца в моей таблице, и теперь все работает отлично. Большое спасибо за ваше время! :) –

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