2017-08-16 43 views
0

好的,所以我在其他線程看到過這個問題,但從來沒有得到完整的答案(至少到目前爲止)。 所以我有一個基本的代碼來插入一個新的用戶的所有信息到一個MySQL數據庫(本地主機),我基本上做了相同的代碼以前,它的工作。 這不是句子的長度,因爲該列可以處理至少40個字符。ExecuteNonQuery()語法錯誤c#

錯誤:

MySql.Data.MySqlClient.MySqlException: 'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Clave='9cdfb439c7876e703e307864c9167a15'' at line 1' 

我的代碼:

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     var nomCom = Nombre.Text + Apellido.Text;    

     /*var exists = Query.Check($"SELECT EXISTS(SELECT 1 FROM usuario WHERE Nombre_Usu='{NombreUsu.Text}'"); 

     if (!exists) 
     { 
      MessageBox.Show("Nombre de usuario ya existe","VERIFIQUE",MessageBoxButton.OK,MessageBoxImage.Exclamation); 
     } 
     else 
     {*/ 
      if (string.IsNullOrWhiteSpace(nomCom) || string.IsNullOrWhiteSpace(NombreUsu.Text) || txtContra.Password.ToString() != txtConfirmar.Password.ToString()) 
      { 
       MessageBox.Show("Verifique los campos porfavor :)", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error); 
       return; 
      } 

      Query.Execute($"INSERT usuario SET Nombre='{Nombre.Text}', Apellido='{Apellido.Text}', Nombre_Usu='{NombreUsu.Text}' Clave='{txtContra.Password.Encriptar()}'"); 
     // } 

    } 

好的,這是用於註冊形式/窗口中的代碼,其中用戶將輸入的數據,並插入到DB 。 「Query.Check」是另一個類(Query),我在其中編寫SQL方法,以重用代碼並節省空間。 哦,「。腳本()」只是一種散列密碼的方法。 這就是:

 public static long Execute(string query) 
    { 
     var con = Connection.Create(); 
     var command = new MySqlCommand(query, con); 
     command.ExecuteNonQuery(); 
     con.Close(); 
     return command.LastInsertedId; 
    } 

所以...我不知道爲什麼這是行不通的,因爲我做了同樣的事情與以前的應用程序和工作就好了! 請有人幫助我。 順便說一句,我是新來的,很抱歉,如果我沒有正確寫信息。

+5

要做的第一件事就是停止構建SQL。每次使用參數化的SQL。 –

+1

您的'INSERT'語句使用的語法錯誤。 https://www.tutorialspoint.com/sql/sql-insert-query.htm或https://www.tutorialspoint.com/mysql/mysql-insert-query.htm –

+0

您是否嘗試閱讀錯誤並查看您的請求參數? – CodeCaster

回答

0

你缺少一個,在你的SQL

, Nombre_Usu='{NombreUsu.Text}' Clave='{txtContra.Password.Encriptar()}' 

需求是

, Nombre_Usu='{NombreUsu.Text}', Clave='{txtContra.Password.Encriptar()}' 

除此之外,使用paramatized查詢(在這裏有關的問題很多)

+0

是的,就是這樣,我簡直不敢相信我會通過。謝謝你,保存了我的思想和團隊。並感謝Jon Skeet和CodeCaster,肯定會實現參數化的SQL。但關於INSERT語法,實際上與SET語句一起工作,覺得它節省了一些線條,但是,會改善。非常感謝。 –

0

你的SQL INSERT的語法不正確。它應該是

INSERT INTO usuario (Nombre, Apellido, Nombre_Usu, Clave) VALUES (@Nombre, @Apellido, @Nombre_Usu, @Clave) 

此外,Jon在評論中聲明,您將要參數化您的查詢。