2017-08-16 42 views
0

これで多くの質問がありました。MANY他のスレッドですが、決して完全な回答は得られません。 私は基本的なコードを持っていて、新しいユーザーをMySQLデータベース(localhost)にすべて挿入しています。以前は基本的に同じコードを実行していました。 文章の長さではありません。列は少なくとも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"は、コードを再利用して領域を節約するために、SQLメソッドを記述した別のクラス(Query)です。 ああ、 ".Encriptar()"は単にパスワードをハッシュする方法です。 ここにある:

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

だから私は、以前のアプリとまったく同じことをしたし、うまく働いていたので、これは、機能しない理由...私は知りません! 誰か助けてください。 Btw、私はここに新しいです、もし私が正しく投稿を書いていなかったら、申し訳ありません。

+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

あなたは、その向こう

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

ことparamatizedクエリ(ここではそれについての質問をたくさん)

+0

うん、それは、それは、私はそのパスを許可することはできません。ありがとう、私の心とチームを救った。また、Jon SkeetとCodeCasterのおかげで、間違いなくパラメータ化されたSQLが実装されます。しかし、INSERT構文については、実際にはSETステートメントで動作し、いくつかの行を節約するように感じるが、ええ、改善されます。どうもありがとう。 –

0

あなたのSQLを使用して、あなたのSQLで

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

ニーズが欠落していますINSERTの構文が正しくありません。それがあります

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

また、コメントに記載されているように、クエリをパラメータ化する必要があります。

関連する問題