login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Quotes in mysql query escapen

Offline Ultimatum - 27/03/2009 13:11 (laatste wijziging 27/03/2009 13:11)
Avatar van UltimatumPHP expert Titel lijkt me duidelijk, hoe doe ik dit in C#.NET? Dit is wat ik al heb maar wat niet werkt, hij voert de update niet uit.
  1. MySqlCommand MailCommand = new MySqlCommand("SELECT onderwerp FROM wm_Email WHERE projectnummer = '"+ nummer +"' AND onderwerp LIKE %@subject% LIMIT 1", connection);
  2.  
  3. MailCommand.Parameters.AddWithValue("@subject", msg.Subject);
  4.  
  5. MessageBox.Show(MailCommand.CommandText);
  6. sqlReader = MailCommand.ExecuteReader();
  7. while (sqlReader.Read())
  8. {
  9. MessageBox.Show(sqlReader.GetValue(0).ToString());
  10. update = new MySqlCommand("UPDATE wm_Email SET msgfile = '" + System.IO.Path.GetFileName(fileName) + "' WHERE projectnummer = '" + nummer + "' AND onderwerp = '" + sqlReader.GetValue(0).ToString() + "'", connection);
  11. update.ExecuteNonQuery();
  12. }
  13. sqlReader.Close();

13 antwoorden

Gesponsorde links
Offline marten - 27/03/2009 13:15
Avatar van marten Beheerder En als je je query even in een messagebox dropt krijg je dan wel je query goed te zien?
Offline Ultimatum - 27/03/2009 13:31
Avatar van Ultimatum PHP expert Dat heb ik gedaan maar weet het niet zeker want ik krijg dit terug.
Citaat:
"SELECT onderwerp FROM wm_Email WHERE projectnummer = '82-1000' AND onderwerp LIKE %@subject% LIMIT 1"


@subject is dus niet vervangen, ik weet niet of dat moet of dat hij pas later word vervangen.
Offline Abbas - 27/03/2009 15:51
Avatar van Abbas Gouden medaille

Crew .NET
Geef je UPDATE-query eens weer in een MessageBox om te zien hoe die er uitziet. Ik zie niet direct iets verkeerd. Wordt je onderwerp goed opgehaald? Ik zie nergens een declaratie van de 'update'-variabele?
Offline Ultimatum - 27/03/2009 15:59
Avatar van Ultimatum PHP expert Dat is het probleem niet want ik declareer update bovenaan het script. Ook krijg ik de foutmelding in de select query en niet in de update query.
Offline Abbas - 27/03/2009 16:10
Avatar van Abbas Gouden medaille

Crew .NET
Aha, we komen er wel! Wat zegt de fout?
Offline Ultimatum - 27/03/2009 16:19
Avatar van Ultimatum PHP expert Deze foutmelding krijg ik.
Citaat:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's.%' AND msgfile = '' LIMIT 1' at line 1 | bij MySql.Data.MySqlClient.MySqlStream.OpenPacket()
bij MySql.Data.MySqlClient.NativeDriver.ReadResult(UInt64& affectedRows, Int64& lastInsertId)
bij MySql.Data.MySqlClient.MySqlDataReader.GetResultSet()
bij MySql.Data.MySqlClient.MySqlDataReader.NextResult()
bij MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
bij MySql.Data.MySqlClient.MySqlCommand.ExecuteScalar()
bij readMsgFiles.Form1.updateEmails() in C:Documents and SettingsdaveVisual Studio 2008ProjectsreadMsgFilesreadMsgFilesForm1.cs:regel 91


Heb methode ook iets aangepast, dit is wat ik nu heb:
  1. string[] fileEntries = Directory.GetFiles("C:\\Program Files\\xampp\\htdocs\\Outlook\\" + nummer);
  2. foreach (string fileName in fileEntries)
  3. {
  4. try
  5. {
  6. connection = new MySqlConnection("Database=db; Data Source=localhost; User Id='root'; Password=''");
  7. connection.Open();
  8.  
  9. if (connection.State == ConnectionState.Open)
  10. {
  11.  
  12. }
  13. else
  14. {
  15. MessageBox.Show("FALSE");
  16. }
  17.  
  18. if (fileName.EndsWith(".msg"))
  19. {
  20. MapiMessage msg = MapiMessage.FromFile(fileName);
  21. if (msg.Subject != String.Empty)
  22. {
  23. MySqlCommand cmd = new MySqlCommand("SELECT onderwerp FROM wm_Email WHERE projectnummer = '" + nummer + "' AND onderwerp LIKE '%" + msg.Subject + "%' AND msgfile = '' LIMIT 1", connection);
  24.  
  25. cmd.Parameters.AddWithValue("@subject", msg.Subject);
  26. textBox1.Text += cmd.CommandText + "\r\n";
  27. try
  28. {
  29. object returnValue = cmd.ExecuteScalar();
  30. if (returnValue != null)
  31. {
  32. MySqlCommand update = new MySqlCommand("UPDATE wm_Email SET msgfile = '" + System.IO.Path.GetFileName(fileName) + "' WHERE projectnummer = '" + nummer + "' AND onderwerp = '" + returnValue.ToString() + "'", connection);
  33. update.ExecuteNonQuery();
  34. textBox1.Text += "\r\n ----------------------------------------------- \r\n" + update.CommandText + "\r\n ----------------------------------------------- \r\n";
  35. }
  36. cmd = null;
  37. }
  38. catch (Exception x)
  39. {
  40. textBox1.Text += "\r\n ----------------------------------------------- \r\n FOUTMELDING \r\n ----------------------------------------------- \r\n\r\n";
  41. textBox1.Text += x.Message + " | " + x.StackTrace;
  42. textBox1.Text += "\r\n ----------------------------------------------- \r\n FOUTMELDING \r\n ----------------------------------------------- \r\n\r\n";
  43. }
  44. finally
  45. {
  46. File.Delete(fileName);
  47. }
  48. }
  49. }
  50. }
  51. catch (Exception x)
  52. {
  53. // MessageBox.Show(x.Message + " " + x.StackTrace);
  54. }
  55. finally
  56. {
  57. connection.Close();
  58. }
  59. }
  60. }
Offline marten - 27/03/2009 16:28
Avatar van marten Beheerder moet je niet de toString() gebruiken in je query?
Offline Abbas - 27/03/2009 16:36
Avatar van Abbas Gouden medaille

Crew .NET
Als je een parameter, genaamd @subject, hebt, waarom gebruik je die dan niet in je SqlCommand? Doe eens:

  1. MySqlCommand cmd = new MySqlCommand("SELECT onderwerp FROM wm_Email WHERE projectnummer = '" + nummer + "' AND onderwerp LIKE '%@subject%' AND msgfile = '' LIMIT 1", connection);
Offline Ultimatum - 27/03/2009 16:46
Avatar van Ultimatum PHP expert Ah ik had hem wel gebruikt, maar toen wat anders geprobeerd (wat ook niet werkt). Ik had het dus al zoals jij nu zegt Titjes, werkt ook niet. Ik krijg deze query terug.
Citaat:
SELECT onderwerp FROM wm_Email WHERE projectnummer = '82-1000' AND onderwerp LIKE '%@subject%' AND msgfile = '' LIMIT 1


@Marten, waar toString() want alles is al een string of ik gebruik al toString(). Zover ik zie iig 
Offline Abbas - 27/03/2009 16:54
Avatar van Abbas Gouden medaille

Crew .NET
Zit er dan wel een waarde in die 'msg.Subject'?
Offline Ultimatum - 27/03/2009 17:14 (laatste wijziging 27/03/2009 17:15)
Avatar van Ultimatum PHP expert Op regel 21 controleer ik of msg.Subject niet gelijk is aan empty
  1. if (msg.Subject != String.Empty)


Als ik regel 26 wijzig naar dit krijg ik wel een waarde terug van msg.Subject.
  1. textBox1.Text += cmd.CommandText + "\r\n Subject: " + msg.Subject + "\r\n";
Offline Abbas - 27/03/2009 17:23
Avatar van Abbas Gouden medaille

Crew .NET
Ik zie dat je nu in je beginpost de single quotes rond die @subject hebt weggedaan, dat gaat volgens mij ook niet werken.
Offline Ultimatum - 27/03/2009 17:26 (laatste wijziging 30/03/2009 09:38)
Avatar van Ultimatum PHP expert Klopt, maar in de query die jij gaf paar posts terug had je wel quotes en die had ik ook geprobeerd, maar werkte niet. Totale script dat ik op dit moment heb:
  1. string[] fileEntries = Directory.GetFiles("C:\\Program Files\\xampp\\htdocs\\dijkhuis.nu\\Outlook\\" + nummer);
  2. foreach (string fileName in fileEntries)
  3. {
  4. try
  5. {
  6. connection = new MySqlConnection("Database=dijkhuis; Data Source=localhost; User Id='root'; Password=''");
  7. connection.Open();
  8.  
  9. if (connection.State == ConnectionState.Open)
  10. {
  11.  
  12. }
  13. else
  14. {
  15. MessageBox.Show("FALSE");
  16. }
  17.  
  18. if (fileName.EndsWith(".msg"))
  19. {
  20. MapiMessage msg = MapiMessage.FromFile(fileName);
  21. if (msg.Subject != String.Empty)
  22. {
  23. MySqlCommand cmd = new MySqlCommand("SELECT onderwerp FROM wm_Email WHERE projectnummer = '" + nummer + "' AND onderwerp LIKE '%@subject%' AND msgfile = '' LIMIT 1", connection);
  24.  
  25. cmd.Parameters.AddWithValue("@subject", msg.Subject);
  26. textBox1.Text += cmd.CommandText + "\r\n Subject: " + msg.Subject + "\r\n";
  27. try
  28. {
  29. object returnValue = cmd.ExecuteScalar();
  30. if (returnValue != null)
  31. {
  32. MySqlCommand update = new MySqlCommand("UPDATE wm_Email SET msgfile = '" + System.IO.Path.GetFileName(fileName) + "' WHERE projectnummer = '" + nummer + "' AND onderwerp = '" + returnValue.ToString() + "'", connection);
  33. update.ExecuteNonQuery();
  34. textBox1.Text += "\r\n ----------------------------------------------- \r\n Subject: "+ msg.Subject +"\r\n ----------------------------------------------- \r\n" + update.CommandText + "\r\n ----------------------------------------------- \r\n";
  35. }
  36. cmd = null;
  37. }
  38. catch (Exception x)
  39. {
  40. textBox1.Text += "\r\n ----------------------------------------------- \r\n FOUTMELDING \r\n ----------------------------------------------- \r\n\r\n";
  41. textBox1.Text += x.Message + " | " + x.StackTrace;
  42. textBox1.Text += "\r\n ----------------------------------------------- \r\n FOUTMELDING \r\n ----------------------------------------------- \r\n\r\n";
  43. }
  44. finally
  45. {
  46. // File.Delete(fileName);
  47. }
  48. }
  49. }
  50. }
  51. catch (Exception x)
  52. {
  53. // MessageBox.Show(x.Message + " " + x.StackTrace);
  54. }
  55. finally
  56. {
  57. //MessageBox.Show("DONE");
  58. connection.Close();
  59. }
  60. }


Dit probleem is nog steeds niet opgelost, iemand die me kan helpen?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.211s