2015-06-23 7 views
0

Это, вероятно, простое решение, но у меня есть крайний срок, чтобы поймать, и я не знаю здесь точной проблемы. Так вот дело, я пытаюсь обновить таблицу, используя этот кусок кода:C# Вставить данные в базу данных MySQL, используя параметры

private void btn_opslaan_Click(object sender, EventArgs e) 
    { 
     string opleidingsid = "Select OpleidingsID From opleidingen Where Opleidingsnaam = '" + cb_opleiding.Text + "'"; 
     MySqlCommand cmdid = new MySqlCommand(opleidingsid, dbconnect.connection); 
     dbconnect.OpenConnection(); 
     MySqlDataReader reader = cmdid.ExecuteReader(); 
     reader.Read(); 
      int oplid = (int)reader.GetValue(0); 

     cmdid.Dispose(); 
     reader.Close(); 
     sql = "UPDATE leerlingen SET Naam = '_naam', Adres = '_adres', Woonplaats = '_woonplaats', Postcode = '_postcode', Email = '_email', Telefoonnummer = '_telefoonnummer', Klas = '_klas', Ovnummer = '_ovnummer', OpleidingsID = '_opleidingsid', Startdatum = '_startdatum', Einddatum = '_einddatum' WHERE LeerlingID = '_leerlingid'"; 

     // sql = "UPDATE leerlingen set Naam = '" + txt_naam.Text + "', Adres = '" + txt_adres.Text + "', Woonplaats = '" + txt_woonplaats.Text + "', Postcode = '" + txt_postcode.Text + "', Email = '" + txt_email.Text + "', Telefoonnummer = '" + txt_telefoonnumer.Text + "', Klas = '" + txt_klas.Text + "', Ovnummer = '" + txt_ovnummer.Text + "', OpleidingsID = '" + oplID + "', Startdatum = '"+mc_startdatum.SelectionStart.Date.ToString()+"', Einddatum = '"+ mc_einddatum.SelectionStart.Date.ToString() +"' WHERE LeerlingID = '" + Int32.Parse(lbl_leerlingid.Text) + "'"; 
     MySqlCommand cmd = new MySqlCommand(sql, dbconnect.connection); 

     cmd.Parameters.AddWithValue("_naam", txt_naam.Text); 
     cmd.Parameters.AddWithValue("_adres", txt_adres.Text); 
     cmd.Parameters.AddWithValue("_woonplaats", txt_woonplaats.Text); 
     cmd.Parameters.AddWithValue("_postcode", txt_postcode.Text); 
     cmd.Parameters.AddWithValue("_email", txt_email.Text); 
     cmd.Parameters.AddWithValue("_telefoonnummer", txt_telefoonnumer.Text); 
     cmd.Parameters.AddWithValue("_klas", txt_klas.Text); 
     cmd.Parameters.AddWithValue("_ovnummer", txt_ovnummer.Text); 
     cmd.Parameters.AddWithValue("_opleidingsid", oplid); 
     cmd.Parameters.AddWithValue("_startdatum", mc_startdatum.SelectionStart.Date.ToString()); 
     cmd.Parameters.AddWithValue("_einddatum", mc_einddatum.SelectionStart.Date.ToString()); 
     cmd.Parameters.AddWithValue("_leerlingid", int.Parse(lbl_leerlingid.Text)); 

     try 
     { 
      cmd.ExecuteNonQuery(); 
      MessageBox.Show("opslaan gelukt"); 
     } 
     catch (Exception error) 
     { 
      MessageBox.Show(error.ToString()); 
      throw; 
     } 
     dbconnect.CloseConnection(); 

     this.Close(); 

    } 

Я уже пытался без одинарных кавычек, это дало бы мне ошибку, что колонный «_leerlingid» не существуют, но это параметр ... Теперь я не получаю никаких ошибок, но он не обновит мою базу данных. Любая помощь пожалуйста

P.S. Игнорируйте SQL-инъекцию, пожалуйста, до этого я не знал лучше, прежде чем узнал о параметрах.

+0

Любопытно. Если вы используете этот прокомментированный запрос, который уязвим для SQL-инъекции, вы получаете нужное поведение? – dotnetom

+0

@dotnetcom Да, но для моего задания мне придется использовать параметры –

+0

В вашем состоянии 'WHERE' у вас есть кавычки вокруг параметра:' WHERE LeerlingID = '_leerlingid''. Кажется, это единственный целочисленный параметр, поэтому кавычки не нужны. Попробуйте удалить эти кавычки. Я просто догадываюсь, потому что я не могу понять, что не работает – dotnetom

ответ

0

Попробуйте заменить ваши параметры с символом @ и удалить одиночные кавычки, например:

SQL = "UPDATE leerlingen SET Naam = @naam, Adres = @adres"; 

cmd.Parameters.AddWithValue("@naam", txt_naam.Text); 
cmd.Parameters.AddWithValue("@adres", txt_adres.Text); 
+0

привет, спасибо за ваш ответ, я сделал это, но я не буду обновлять свою базу данных с правильной информацией. –

+0

@JoeyDeLaat Странно, я не понимаю, почему это потерпит неудачу, я сделал это раньше. Вы получили сообщение об ошибке? – AdamMc331

+0

Нет, это то, что меня беспокоит, я мог бы попытаться создать команду вставки с использованием параметров и посмотреть, работает ли это так, а затем ее уверенность в проблеме с кодом. –

-1

, когда я создания новых данных в C#, я делаю это так ..

// значения

String a = "COL1ROW1", b = "COL1ROW2"; 

// это код MySQL

String query = "Insert Into tableName(Column1, Column2)values('" + a + "','" + b + "')"; 

// conn - ваш mysqlconnection

MySqlCommand cmd = new MySqlCommand (query, conn);

// затем выполнить его

cmd.ExecuteNonQuery();

+2

В этом случае прекратите создание данных таким образом, потому что такие запросы уязвимы для атаки SQL Injection. Использование кода таким образом - прямой путь к катастрофе. – dotnetom

+0

Правда, вот почему я прокомментировал этот метод из своего кода. –

+0

ahm. какова будет бедность? Я всегда использую такой код, но у меня не было никаких ошибок или чего-то еще. –

0

Я думаю, что вы ошиблись, вы не должны инициализировать свой MySqlCommand таким образом. Это должно быть так.

MySqlCommand cmd; 

cmd = dbconnect.createCommand(); 
cmd.CommandText = "UPDATE tableName SET [email protected], [email protected] where [email protected]"; 
cmd.Parameters.AddWithValue("@id", idTxt.Text); 
cmd.Parameters.AddWithValue("@firstname", fName.Text); 
cmd.Parameters.AddWithValue("@lastname", lName.Text); 
cmd.ExecuteNonQuery(); 
+0

dbconnect - это класс, который не содержит метод createCommand, поэтому я не смогу назвать эту функцию –

+0

Я думал, что dbconnect - это ваш MySqlConnection. Может быть, вы можете изменить его на любой ваш MySqlConnection. –

+0

Я думаю, что вы имеете в виду именно то, что я делаю с MysqlCommand cmd = new MysqlCommand (sql, dbconnect.connection(); –